`
isiqi
  • 浏览: 16062876 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

使用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(whichisthedefault),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
=>:webdo
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]executingcommand
***[err
::192.168.100.231]/var/www/webapps/space/current/script/spin:line1:mongrel_rails:commandnotfound
commandfinished
command"sh-c'cd/var/www/webapps/space/current&&nohupscript/spin'"failedon192.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_railsstart-eproduction-p8080-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愉快
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics