您的位置:首页 > 编程语言 > Ruby

利用heroku搭建ruby网站项目

2015-04-24 13:26 176 查看

1.前言

首先说明,这篇文章肯定有不完整的地方,如果遇到错误,还需结合其他搭建成功的博客思考解决问题。如果有git,ruby知识会好很多,如果懂了heroku的运行原理更好。

2.大体分析 

(里面的分析,是我配置时所想,不一定准确)

Heroku:可以看作一个服务器,能够自动帮你配置程序,网站,支持ruby,php,nodejs等。官方提供了ruby的配置说明。如果使用你需要先注册,最好使用gmail账号。

与git的关系:git是一个版本管理工具,但是必须安装Heroku的Heroku Toolbelt,它里面自带了git,与heroku建立了某种关系,使得git push heroku可以直接把项目发到远程的heroku服务器的某个你建立项目的地方。(我很奇怪,git是怎么知道我的heroku项目的名字的,因为heroku可以建立多个项目)。

git发送项目的要求:git发送的东西必须能够让heroku知道这是个什么项目,如何安装,运行等。 当然有些可以通过 heroku run “your commond” 命令自行配置。

思路整理:heroku先创建项目,给你留个位置,git发送你的项目到那个地方,heroku根据配置文件,自动判断帮你运行。

3.关于发布ruby的简单说明

以网站为例。首先写好程序(ROR,sinatra等网站都行【不过数据库我至今还没很好的使用】),然后写好Gemfile(可以让人知道你的项目需要安装那些gem,这样heroku就会自动帮你安装),用rack测试一下,成功后基本上可以push了。但是有时候本地可以,而进入Heroku就不行。

4.具体的例子

这是一个简单sinatra的例子,参照一个网址初识Sinatra系列可以制作一个较为复杂的网站(最后也告你怎么发布到heroku,但是我就是数据库那里不行)  。
建立文件夹 helloworld,cmd进入到这个目录,然后依次执行以下命令,#为我的说明
($  cd helloworld  ***一定要在这个目录下面)
        $ heroku create  myhelloworld  
 #这个为了告诉大家项目名称和目录没有关系,如果不提供heroku会帮你生成一个。最后访问的网址为 http://myhelloworld.herokuapp.com
#当然这个有时需要你登录, heroku login 然后输入注册的邮箱,以及 heroku上的密码
#有时可能还要提示你生成公钥,如下
#ssh-keygen -t rsa   #生成
#heroku keys:add   #加入
#heroku keys #查看  
#具体其他名字自行查阅
写一个简单的.rb文件命名为main,如下 #随意起,注意和后面统一
require 'sinatra'
require 'slim'
#$ gem install sinatra-contrib  这是下面那个require的gem名,要在gemfile中写好
#require 'sinatra/reloader'
#下面这个负责检测修改并重启。
#configure :development do
#  register Sinatra::Reloader
#  set :server, "webrick"
#end

get '/' do
  "hello world"
end


    创建一个config.ru
require 'bundler'
Bundler.require
require './main'  # your ruby file
run Sinatra::Application
    写好Gemfile,写什么到时候帮你装什么
source 'http://rubygems.org'
#source :rubygems
ruby "2.1.5"
gem "sinatra"
gem "sinatra-contrib"
gem "slim"


 $ bundle install  # 前提要 装好bundle 。它 帮你生成 Gemfile.lock。 如果改动了 gemfile 要删掉lock文件重新 bundle,好像也可以bundle update 
 $ rackup 
 #写好config.ru 然后运行 rackup检测一下你的网站,这里成功在heroku上才可能成功,网址为 http://localhost:9292/ 
 可以写个 .gitignore 文件,里面写上你不想上传的文件

  然后开始git,懂git命令可以轻易坚决遇到的疑惑和困难。

   $ git init
   $ heroku git:remote -a  yourappname # 应该是指定将这个项目存储到heroku哪个仓库下。
   $ git add .  #注意有 点号
   $ git commit -am "initial delployment"  
   #当然之后做了任意修改,删除,新增等,就需要自行用类似的git命令解决,因为heroku就是基于git的,这里完全和heroku无关,只用考虑git的使用。
   $ git push -f heroku master  #至于加不加 -f 这也是git的规则。 我是因为之前遇到了问题加了 -f 成功解决了。
   
这样就可以访问你的网战了   http://myhelloworld.herokuapp.com    ,如果你不知道就运行如下命令,自动帮你打开浏览器及网页
   $ heroku open 
   
  但是如果这里出现了application error,而你自己觉也没用什么高端的配置,还有一个命令要运行
  $ heroku ps:scale web=1    #
这是解决了我问题的命令

如果需要另外的配置就运行
   heroku run irb   #这个就相当于登录heroku服务器你的项目的irb终端
   #heroku run “【command】”   比如 bash等都可以运行,或是一个命令语句也行
  有时可以这样加一些配置
  $ heroku config:add key=value  --app chjlx    # ***
看好最后怎样指定你的app的

如果要取回git上的资源,比如有文件下载等,则运行类似的git命令 git clone git@heroku.com:chjlx.git

5.遇到的问题及解决办法

Unable to connect to Heroku API, please check internet connectivity and try again.
这个错误可能是因为链接不稳定造成,所以重新运行几次命令即可。

Unable to activate sinatra-contrib-1.4.2, because tilt-2.0.1 conflicts with
tilt (~> 1.3)
http://qiita.com/histori/items/33c8b8e007854173b3b3  这个网站有详细说明,我是通过gem uninstall tilt 删掉了 2.0.1版本可以的

关于使用sqlite的错误,gemfile中大概写成如下
group :development, :test do
gem 'sqlite3', :platform => :ruby
end
group :production do
gem 'thin'
gem 'pg'
end


6. 附加说明

下面有一些可能用到的git命令:
git remote rm heroku 

git remote add heroku git@heroku.com:yourappname.git

增加文件的git命令

git add .

git add --update .

git commit -am "add User.java"

git clone git://github.com/cloudhead/dorothy.git mytoto  

关于gemfile
第一行的 source 很重要,现在国内封锁的紧,可以使用 https://ruby.taobao.org/ 。这样bundle的时候就可以自己帮你下载缺少的东西。
第二行的ruby版本指定也是很必要的,因为bundle是在你本地的电脑上运行的,应该会记录一些信息,以便于后面heroku安装。

一般运行时推荐 bundle exec ruby ...   这样他会尽可能根据GemFile指定的版本来运行,而不会选择其他版本,减少出错的可能。

7. 一个sinatra的模板

require 'sinatra'
require 'sinatra/reloader'
require 'erb'
# gem install sinatra-reloader

configure :development do
register Sinatra::Reloader
set :server, "webrick"
end
set :public_folder,File.dirname(__FILE__)+"/playground"
set :views, File.dirname(__FILE__)+"/playground"

get '/' do
call env.merge("PATH_INFO" => '/tf')
end

get '/tf' do
erb :index
end


再来一个更加方便的运行静态网站的模板
也就是localhost:4567 然后就会出现选择列表,进去你想要的网站
# -*- coding:utf-8 -*
dir=File.expand_path("..",__FILE__);
Dir.chdir(dir)

require 'sinatra'
require 'sinatra/reloader'
require 'erb'
# gem install sinatra-reloader

configure :development do
register Sinatra::Reloader
set :server, "webrick"
end

usedir="/clmtrackr-dev/examples/"

set :public_folder,"E:/RmDownloads/RPGMV/NewData/"
set :views, "E:/RmDownloads/RPGMV/NewData/"

#set :public_folder,File.dirname(__FILE__)+usedir
#set :views, File.dirname(__FILE__)+usedir

links=["tf","clm","rpgvm"]
get '/' do
# call env.merge("PATH_INFO" => '/tf')
html="<ol>"
links.each do|e|
html+="<li><a href='/#{e}'>#{e}</a></li>"
end
html+="</ol>"
erb html
end

get '/rpgvm' do
erb :index
end

get '/tf' do
erb :index
end

get '/clm' do
#erb "examples/example".to_sym
erb :example
end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: