仅针对特定角色运行Capistrano任务

时间:2011-06-29 23:10:18

标签: ruby-on-rails capistrano roles task

我的项目有一个多步骤管道,其中包括一些步骤,如Crawling,NLP等,但我只是将它们称为Step1,Step2等。此外,我希望能够部署到不同的环境(开发) ,prod等)。

我想我将使用Capistrano的多级组件来部署到不同的环境(例如,cap dev deploy vs cap prod deploy)。

对每个管道步骤使用角色似乎也很直观。但是,每个步骤都相当独立于管道的其余部分运行,因此可以独立于其他步骤重新启动/部署每个步骤。看起来Capistrano似乎不支持仅针对特定角色运行任务。有什么好办法呢?

这是为每个角色专门执行此定义任务的最佳方式吗?如果角色之间有一些共同的任务怎么办?也许辅助方法就是那里的答案?

4 个答案:

答案 0 :(得分:3)

不确定这正是您所寻找的,但是当我想对某个特定角色做某事时,我会使用capistrano shell。例如,假设我想部署但仅限于我的应用服务器,我可能会执行以下操作:

cap production shell
cap>with app
cap>!deploy #or any other cap task you have

如果需要,您也可以按机器范围。再次:

cap production shell
cap>on <machine name or ip>
cap>!deploy #or any other cap task you have

希望它有所帮助,

斯科特

答案 1 :(得分:2)

如果要从命令行运行capistrano任务,但仅针对已定义角色的子集,则可以使用ROLES参数。

以下命令仅对角色category:task执行任务was

cap ROLES=was category:task

ROLES参数是多值的,因此您可以添加以逗号分隔的更多角色:

cap ROLES=was,db category:task

有关详细信息,请参阅invoke文档

答案 2 :(得分:1)

查看此讨论Creating a Capistrano task that performs different tasks based on role

task :stop_memcached, :roles => :memcache do 
...
end

答案 3 :(得分:1)

不确定添加了哪个版本的功能,但是上限将在ROLES环境变量中查找以确定要运行的角色

$ ROLES=db cap deploy