透明思考


Transparent Thoughts


Chef学习手记之叁:红宝石菜谱

有了一台基本的服务器,现在我就要在上面配置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.rbinclude_recipe “passenger_apache2::mod_rails”

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

# default.rbgroup ‘rails’ dogroup_name ‘rails’action :createenduser ‘railsapp’ dousername ‘railsapp’action :createend

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

# default.rbdeploy_to = ‘/var/rails’directory deployto doowner “railsapp”group “rails”mode “0755”action :createend

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

# default.rbweb_app ‘rails_app’ dotemplate “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已经开始工作了。

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

(未完待续)