Chef学习手记之叁:红宝石菜谱
March 2nd, 2011
有了一台 基本的服务器 ,现在我就要在上面配置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已经开始工作了。
嗯,虽说写自己的菜谱挺好玩的,不过 这个菜谱 很值得学习──其实很多菜谱都值得学习,所以…
(未完待续)



