使用Capistrano部署rails

背景:

本地: 192.168.100.8) xp,
rails服务器: 192.168.100.231 centos 3
svn服务器:192.168.100.212 centos 4
通过本地脚本部署应用到rails服务器
1)本地安装capistrano
geminstallcapistrano
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 "



#Ifyouaren
' tdeployingto/u/apps/#{application}onthetarget
#servers(which is the default ),youcanspecifytheactuallocation
#viathe:deploy_tovariable:
#
set :deploy_to, " /var/www/#{application} "

#Ifyouaren
' tusingSubversiontomanageyoursourcecode,specify
#yourSCMbelow:
#
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-fR755#{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&&nohupscript/spin' "
servers:[
" 192.168.100.231 " ]
[
192.168 . 100.231 ]executing command
***[err
:: 192.168.100.231]/var/www/webapps/space/current/script/spin:line1:mongrel_rails:commandnotfound
command finished
command " sh-c'cd/var/www/webapps/space/current&&nohupscript/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
文档
作了些解释, capistrano 会从默认的ruby路径加载gem或者程序,如果你是用
./configure --prefix方式安装的ruby 并且修改/etc/profile中的ruby path,很有可能就会出现这种问题
所以最好还是指定path,作者也说会修正这个问题,让我拭目以待
5)在#{rails_app_root}/script目录创建spin文件
用于启动服务器,
在本文中是:
mongrel_rails start -eproduction-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)部署准备
capdeploy :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)启动服务器
capdeploy :start
8)部署
cap deploy
一旦有任何修改,提交到版本服务器,那么执行该命令就能自动完成部署工作,在本文中就是把最新本版checkout到rails服务器上,然后重启服务器,一个命令就搞定了
总结 :
本文通过使用capistrano 一键搞定自动部署,其实也完全可以自己写脚本,比如之前我们在服务器上写了个脚本,执行checkout和重启的命令 ,但麻烦的是如果把应用部署到多个机器,就有可能在每个机器上执行一遍,当然也仍然可以写脚本搞定这些,但有这么好的工具何必再麻烦,
如果仅部署一台机器,感觉本地执行capistrano命令稍微有点慢不如我以前写的单机脚本快,但如果部署多台,优势就体现出来了,毕竟mongrel集群用的多,况且capistrano 也不仅仅限于checkuout和启动服务器,还有数据库部署之类的功能,这个还有待进一步研究,祝大家cap愉快
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值