Capistrano任务不在给定范围内执行。

时间:2012-02-06 10:27:09

标签: ruby-on-rails ruby capistrano

我已经构建了一些我需要在定义的: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

1 个答案:

答案 0 :(得分:0)

使用Capture将导致任务仅在列出的第一台服务器上运行。

来自文档:

捕获助手将在第一个匹配的服务器上执行给定的命令,并将该命令的输出作为字符串返回。

https://github.com/capistrano/capistrano/wiki/2.x-DSL-Action-Inspection-Capture

不幸的是我遇到了类似的问题,find_servers解决方案可能会有效,但它很麻烦,并且运行N次N次,其中N是您拥有的服务器数量。