我已经构建了一些我需要在定义的:app
角色中运行的capistrano任务。这就是我到目前为止所做的:
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
旗帜?
提前致谢
// Emil
答案 0 :(得分:0)
使用Capture将导致任务仅在列出的第一台服务器上运行。
来自文档:
捕获助手将在第一个匹配的服务器上执行给定的命令,并将该命令的输出作为字符串返回。
https://github.com/capistrano/capistrano/wiki/2.x-DSL-Action-Inspection-Capture
不幸的是我遇到了类似的问题,find_servers解决方案可能会有效,但它很麻烦,并且运行N次N次,其中N是您拥有的服务器数量。