resin设置权限_使用webistrano发布一个resin项目

最近几天通过对webistrano和capistrano的搭建和了解,开始在公司的内部测试平台上应用webistrano 。目前需要部署的是个resin应用,需要通过webistrano实现的目标:

目录与环境的自动创建

自动代码check ( svn或git )

配置文件的自动修改

resin服务的web启停

一、project type模板

这里使用的的模板为 webistrano项目配置 中的模板文件,如下:

$ cat resin_web.rb

module Webistrano

module Template

module ResinWeb

CONFIG = Webistrano::Template::Base::CONFIG.dup.merge({

}).freeze

DESC = <

Template for use with resin projects that update files and restart resin.

The basic (re)start/stop tasks of Capistrano are overrided with restartstartstop tasks.

EOS

TASKS = Webistrano::Template::Base::TASKS + <

namespace :deploy do

task :restart, :roles => :app, :except => { :no_release => true } do

run "#{try_sudo} setsid /etc/init.d/resin restart"

end

task :start, :roles => :app, :except => { :no_release => true } do

run "#{try_sudo} setsid /etc/init.d/resin start"

end

task :stop, :roles => :app, :except => { :no_release => true } do

run "#{try_sudo} setsid /etc/init.d/resin stop"

end

end

EOS

end

end

end

该模板同样适用于tomcat项目,只需要将其中的脚本名称修改掉即可。

注:上面的setsid 也可以使用nohup ,这两个不加的情况在start时,会出现在ps里查看时,程序启动后又自动关闭了(由于webistrano远程过来的主进程运行完退出终目后,子进程也终止了,使用nohup和setsid可以解决该问题)。

二、recipes 配置

在发布项目时,会遇到使用svn或git checkout到远程目录时没有写入权限的问题,引了下原因,是因为capistrano在check时没有使用#{try_sudo}导致的,又不想去修改capistrano的源代码(相对麻烦),可以通过在recipes里增加task 解决code update时的权限问题。

另外在项目发布时,还会遇到需要删除.svn或.git 的问题、自动更改配置文件的问题,这里的recipes主要就是为了解决以上三个问题,如果有其他问题,也可以在此基础上进行增加task ,代码如下:

namespace :resin do

desc "change_permi"

task :change_permi do

run "#{try_sudo} chown -R #{runner}:#{runner} #{deploy_to}"

end

desc "del_svn"

task :del_svn do

run " #{try_sudo} rm -rf `find #{latest_release} -type d -name .svn` "

run "cd #{latest_release} && #{try_sudo} rm -rf public tmp log"

run "mv #{latest_release}/WEB-INF/classes/config.properties #{latest_release}/WEB-INF/classes/config.properties.bak"

end

desc "replace_conf"

task :replace_conf do

resin_config =<

ymconvHost=172.20.0.43

#ymconvHost=hou.ymtrack.com

ymconvPort=8080

ymconvRoute=ymconvhttpdao

redis.host=localhost

redis.port=6378

urlsyncDelay=1000

EOF

put resin_config, "#{latest_release}/WEB-INF/classes/config.properties"

end

end

before 'deploy:update','resin:change_permi'

after 'deploy:update','resin:del_svn','resin:replace_conf'

需要注意的是这里文件是通过先写到一个类似变量里,再put上去的 。在此之前我试图通过cat EOF的方式直接写入文件发现是行不通的。

注:在del_svn中的mv 语句可以不要,后面的 replace_conf中的put语句在存在原文件时,会自动覆盖原文件。这里便于理解,我并没有删除。

一点题外话

capistrano里的语法十分灵活,比如有多个shell 语句需要执行时,可以利用上例中的put语句写入到文件再执行,也可以使用each 定义一个task逐条执行,如下:

task :aaaa do

[

"mkdir -p /tmp/src",

"cd /tmp/src && wget http://nginx.org/download/nginx-1.6.0.tar.gz",

"cd /tmp/src && tar xvzf nginx-1.6.0.tar.gz"

].each {|cmd| run cmd}

end

需要注意两点:1、每条命令后面的逗号不能少 ;2、每条命令完,相当于退出再执行下一条 ,如上面的例子中,如果我用的是root用户,后面两条命令如果不加前面的cd 语句部分,nginx就会下载的/root目录 ,并解压到/root 目录 。

上面两步配置完成后,在web界面上做stage、host、recipes、roles的关联后,在stage界面依次执行 deploy:setup ----> deploy:update  -----> deploy:start  ,即可以完成一个resin项目会环境部署到启动的所有步骤。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值