使用Capistrano部署rails

来源:互联网 发布:python html网页解析 编辑:程序博客网 时间:2024/06/05 02:45

 

 背景:

 
本地: 192.168.100.8)                     xp,
rails服务器: 192.168.100.231    centos 3
svn服务器:192.168.100.212    centos 4
 
通过本地脚本部署应用到rails服务器
 
1)本地安装capistrano
gem install capistrano 
 
2)检查安装是否有效
cap -V
 
本文看到结果:Capistrano V2.1.0,说明安装成功
 
3)开始工作
 
进入本地 rails工程根目录执行
 
capify .  
 
 
这个命令会生成两个文件,一个是Capfile文件,在应用的根目录下,另一个是deploy.rb文件,在应用的config目录下
 可以用cap -T 查看所有task, cap -e deploy 解释deploy任务的详情 。
 
4)修改config/deploy.rb文件
 

 
set :application, "space"
set :repository, "http://192.168.100.212:3690/repo/moxtv/branches/space"
 
 
 
# If you aren
't deploying to /u/apps/#{application} on the target
# servers (which is the default), you can specify the actual location
# via the :deploy_to variable:
set :deploy_to, "/var/www/#{application}"
 
# If you aren
't using Subversion to manage your source code, specify
# your SCM below:
set :scm, :subversion
 
 
 
role :app, 
"192.168.100.231"
role :web, 
"192.168.100.231"
role :db, 
"192.168.100.231", :primary => true
 
#
1
set :svn_username, "weip"
set :svn_password, "weip"
 
#
2
set :deploy_to, "/var/www/webapps/#{application}"          
set :user, "root"    
set :password, "secretpa"
 
 
#
3
set :use_sudo,false 
 
#
4
task :chmod, :roles 
=> :web do
 run 
"chmod -fR 755 #{deploy_to}/current/script/*"
end
 
after 
"deploy:symlink", :chmod
 
#
5
default_environment[
"PATH"="/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/ruby/bin:/usr/local/ant/bin:/usr/java/jdk1.5.0_05/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin"
 
 
额外添加了5个部分
#1 指定SVN用户名密码
 
#2 指定远程目的服务器的用户名和密码
 
#3 因为懒得配置SUDO,所以加上这行,直接用ROOT访问,否则会有权限问题
 
#4 为了能使目的服务器能执行脚本,特意加上全县,否则会有权限问题
 
#5 显示的指明路径,否则互有如下问题
 
比如
 问题1:
cap:start

 * executing `deploy
:start'
 * executing 
"sh -c 'cd /var/www/webapps/space/current && nohup script/spin'"
    servers: [
"192.168.100.231"]
    [
192.168.100.231] executing command
*** [err 
:: 192.168.100.231] /var/www/webapps/space/current/script/spin: line 1: mongrel_rails: command not found
    command finished
command "sh -c 'cd /var/www/webapps/space/current && nohup script/spin'" failed on 192.168.100.231
 
问题2
cap:restart
* executing `deploy:restart'
 * executing "/var/www/webapps/space/current/script/process/reaper"
    servers: ["192.168.100.231"]
    [192.168.100.231] executing command
*** [err :: 192.168.100.231] /var/www/webapps/space/current/script/process/../../config/boot.rb:18:in `require': no such file to load -- rubygems (LoadError)
*** [err :: 192.168.100.231] from /var/www/webapps/space/current/script/process/../../config/boot.rb:18
*** [err :: 192.168.100.231] from /var/www/webapps/space/current/script/process/reaper:2
    command finished
command "/var/www/webapps/space/current/script/process/reaper" failed on 192.168.100.231
 
 
文档
http://www.mail-archive.com/capistrano@googlegroups.com/msg02196.html
作了些解释, capistrano 会从默认的ruby路径加载gem或者程序,如果你是用
./configure --prefix方式安装的ruby 并且修改/etc/profile中的ruby path,很有可能就会出现这种问题
所以最好还是指定path,作者也说会修正这个问题,让我拭目以待
 
 
5)在#{rails_app_root}/script目录创建spin文件
 
用于启动服务器,
在本文中是:
mongrel_rails start -e production -p 8080 -r /var/www/webapps/space/current/public -l /var/www/webapps/space/current/log/m.log -P /var/www/webapps/space/current/tmp/pids/dispatch.0.pid -d
本文使用的是mongrel单机服务器,-d参数一定要加,否则不会产生log和pid,这将导致cap:restart无法正常运行
 
到此一切准备就绪,开始运行
 
6)部署准备
cap deploy:setup
 
这一步会连上服务器,创建一些目录:
ruby 代码
#{deploy_to}/   
#{deploy_to}/releases   
#{deploy_to}/shared   
#{deploy_to}/shared/log   
#{deploy_to}/shared/system   
#{deploy_to}/shared/pids   
 
releases目录里面会存放所有的发布版本
shared目录是为了共享文件
在第一此部署后还会产生一个current链接,它会自动指向releases目录里面最新的版本
 
7)启动服务器
cap deploy:start
 
8)部署
cap deploy
一旦有任何修改,提交到版本服务器,那么执行该命令就能自动完成部署工作,在本文中就是把最新本版checkout到rails服务器上,然后重启服务器,一个命令就搞定了
 
 
总结 :
本文通过使用capistrano 一键搞定自动部署,其实也完全可以自己写脚本,比如之前我们在服务器上写了个脚本,执行checkout和重启的命令 ,但麻烦的是如果把应用部署到多个机器,就有可能在每个机器上执行一遍,当然也仍然可以写脚本搞定这些,但有这么好的工具何必再麻烦,
如果仅部署一台机器,感觉本地执行capistrano命令稍微有点慢不如我以前写的单机脚本快,但如果部署多台,优势就体现出来了,毕竟mongrel集群用的多,况且capistrano 也不仅仅限于checkuout和启动服务器,还有数据库部署之类的功能,这个还有待进一步研究,祝大家cap愉快
 
原创粉丝点击