如何在Capistrano中分离角色?

时间:2011-08-25 13:09:07

标签: ruby-on-rails ruby-on-rails-3 deployment capistrano

我正在尝试使用Capistrano部署我的RoR应用程序。一切都很好,直到我在我的Capistrano配置中引入了另一个角色,即:web角色,它应该是我的HTTP /反向代理服务器。

我的理解是:app角色应该引用应用服务器(瘦,mongrel,无论如何)和:web角色应该引用前端服务器(nginx,apache),所以我对选择感到困惑在所有角色上运行所有任务,即使capistrano默认将它们分开。

现在我的问题是我无法进行部署:update_code仅在具有:app角色的服务器上运行,例如,capistrano错误因为它尝试在我的Web服务器上运行update_code而运行,我甚至没有安装git(我不需要它......)。有没有人成功这样做?有人可以分享代码吗?

TIA,ngw

2 个答案:

答案 0 :(得分:1)

出现此问题是因为内置任务不尊重调用它们的自定义任务的角色限制,即

task my_task, :roles => :web do
    run "some command"  # will only be executed on servers with the :web role
    update              # will be executed for all roles
end

您将直觉,必须覆盖所有内置任务。或者你可以尝试Rodney Koch的patch到Capistrano。

答案 1 :(得分:0)

您是否在任务名称中明确指定了角色?

task :task_A, :roles => :web do
  #do stuff here
end

task :task_B, :roles => :app do
  #do stuff here
end