有了一台 基本的服务器 ,现在我就要在上面配置Rails服务器。当然这件事已经有人干过了,但我不想用别人的菜谱,再怎么说我也是 RubyWorks 的开发者…

(还有,我觉得Fedora还是不如Ubuntu好用,所以我偷偷把EC2的机器换成了Ubuntu 10.04。)

新建一个菜谱真容易,用knife一下子就搞定了:

$ knife cookbook create my_rails_gig

菜谱放在 #{chef-repo}/cookbooks/my_rails_gig 下面。首先要看的是 recipes/default.rb ,缺省菜色的做法就写在里面。在我开始做自己的配置之前,我得先保证Apache和 Passenger 都配好了。

# default.rb
include_recipe "passenger_apache2::mod_rails"

然后涅,我要用“railsapp”这个用户来部署Rails应用──不可以用root来跑服务。所以我得确保有这个用户(以及它独占的一个组)。

# default.rb
 group 'rails' do
  group_name 'rails'
  action :create
end

user 'railsapp' do
  username 'railsapp'
  action :create
end

接下来,按照我们RubyWorks的传统,Rails应用应该部署在 /var/rails 目录下面。所以要确保有这个目录。

# default.rb
deploy_to = '/var/rails'

directory deploy_to do
  owner "railsapp" 
  group "rails" 
  mode "0755" 
  action :create
end

现在是最挑战的部分:配置Passenger…但是只要是像我一样经验丰富的Rails服务器管理员,这个也小菜一碟_ Apache2那本菜谱 讲了怎么在Apache里做web_app,你只要调用就行:

# default.rb
web_app 'rails_app' do
  template "rails_app.conf.erb" 
  docroot "#{deploy_to}/current/public" 
  server_name "#{MY_COOL_HOSTNAME}" 
  rails_env 'production'
end

唯一的trick就是 rails_app.conf.erb 这个template:我需要把它放在 templates/default 目录下(规则和Rails有点像)。别的么…就再没啥啦~~(不信就 看代码 )噢对了,别忘了在这台机器的角色里加上新的菜色:

"run_list": [
            "recipe[passenger_apache2::mod_rails]",
        "recipe[my_rails_gig]" 
    ],

噢也~菜谱写完开始做菜~先把菜谱上传到服务器:

$ knife cookbook upload my_rails_gig

再跑到我的服务器上执行一下 chef-client …这就好了。用 railsapp 用户到 /var/rails/current 下面建一个应用(为什么要“current”?问 Capistrano )。浏览器访问80端口,看后台日志,Rails已经开始工作了。

嗯,虽说写自己的菜谱挺好玩的,不过 这个菜谱 很值得学习──其实很多菜谱都值得学习,所以…

(未完待续)

blog comments powered by Disqus