ruby - 你如何在 Capistrano 中为不同的角色定义不同的相同任务?

标签 ruby capistrano

我正在使用 Capistrano 来处理我的部署,我在我的设置中有两个不同的角色 - :web 和 :processing。它们都有通常的 :deploy 任务,但 :restart 任务对于两种类型的服务器需要不同。

所以我的第一次尝试是这样的:

task :restart, :roles => :web do
    run "... web related restart stuff ..."
end

task :restart, :roles => :processing do
    run "... processing related restart stuff ..."
end

这不起作用,因为第二个 :restart(对于 :processing 角色)替换了第一个 :restart(对于 :web 角色),而 :web :restart 永远不会发生。

我快速浏览了一下,看看是否可以根据任务运行时服务器可能处于的角色(或多个角色)编写条件代码,但几乎没有关于此类事情的文档。有什么想法吗?

最佳答案

你应该使用命名空间:

namespace :web do
  desc "Restart web servers"
  task :restart, :roles => :web do
    # Restart Magic Here
  end
end

namespace :process do
  desc "Restart process servers"
  task :restart, :roles => :process do
    # Restart magic here
  end
end

# Optionally:
task :restart do
  web.restart
  process.restart
end

我想这就是您要找的!

此外,要在命令行上使用它们,您可以使用

$ cap <stage>           # (if using multistage)
$ cap web:restart       # Restarts web servers
$ cap process:restart   # Restarts process servers
$ cap restart           # Restarts both process and web servers

(来源:我是 Capistrano 的维护者。)

关于ruby - 你如何在 Capistrano 中为不同的角色定义不同的相同任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3447025/

相关文章:

ruby - 安装 Foundation 5 时出现问题?

ruby-on-rails - 通过 ruby​​ 在谷歌驱动器中创建文件夹时出错

ruby - 删除hadoop上超过x天的文件

ruby-on-rails - 从Docker容器中管理Capistrano部署的SSH key

ruby-on-rails - 使用 Passenger/Capistrano 部署到 Nginx 服务器后图像不显示

ruby - 如何从命令行将数组作为参数传递给 Ruby 函数?

ruby-on-rails - link_to 如何在 Rails 中工作?

ruby-on-rails - Capistrano:无法访问 `~/releases/':没有这样的文件或目录

ruby-on-rails - 带有多个队列的 sidekiq : jobs get stuck

ruby-on-rails-3 - 部署时使用 capistrano 3 时遇到问题