【发布时间】:2012-02-06 10:27:09
【问题描述】:
我已经构建了一些 capistrano 任务,我需要在定义的 :app 角色中运行这些任务。这是我到目前为止所拥有的:
desc "Stop unicorn"
task :stop, :roles => :app do
logger.info "Stopping unicorn server(s).."
run "touch #{unicorn_pid}"
pid = capture("cat #{unicorn_pid}").to_i
run "kill -s QUIT #{pid}" if pid > 0
end
据我所知,这应该在:app 角色中给定的服务器上运行给定的命令,对吧?但事实是它在:db 角色的服务器上运行命令。
任何人都可以对这个问题有所了解吗?或者有没有办法强制 Capistrano 遵守 :roles 标志?
提前致谢
// 埃米尔
【问题讨论】:
-
我进行了更多调查,结果发现,当它完成这项任务时,
servers数组已经包含了来自所有角色(即合并app、web和db)这是预期的行为吗? -
还有更多。似乎捕获命令在所有服务器上运行,然后在所有服务器上运行 kill 命令。这导致 kill 命令试图杀死所有服务器上最后一个服务器的 id。对于这种情况是否有最佳实践,我想在特定服务器上运行一系列命令,然后在服务器阵列中进行迭代?
-
您的环境角色设置如何?
-
我发现我可以通过 Capistrano 它自己提供的
find_servers数组迭代解决我的问题。所以它自己解决了,但我仍然认为这不是最好的解决方案。
标签: ruby-on-rails ruby capistrano