创建Capistrano任务,根据角色执行不同的任务
我正在寻找一种方法来调用单个Capistrano任务来执行不同角色的不同操作。 Capistrano能够做到这一点,还是我为每个角色编写了一个特定的任务?
在Capistrano执行此操作的标准方法:
task :whatever, :roles => [:x, :y, :z] do x_tasks y_tasks z_tasks end task :x_tasks, :roles => :x do #... end task :y_tasks, :roles => :y do #... end task :z_tasks, :roles => :z do #... end
所以是的,你需要编写单独的任务,但是你可以从父任务中调用它们,它们将适当地过滤。
实际上没有:
% cat capfile server 'localhost', :role2 task :task1, :roles=>:role1 do puts 'task1' end task :task2 do task1 end % cap task2 * executing `task2' * executing `task1' task1
:roles param进一步传递给run命令等,但似乎并不影响该任务是否实际被触发。
对不起,没有找到评论评论的方式,所以我在这里写了。
你也可以这样做
task :foo do run "command", :roles => :some_role upload "source", "destination", :roles => :another_role end
使用命名空间: https : //github.com/leehambley/capistrano-handbook/blob/master/index.markdown#namespacing-tasks
namespace :backup do task :default do web db end task :web, :roles => :web do puts "Backing Up Web Server" end task :db, :roles => :db do puts "Backing Up DB Server" end end
这些任务显示在一个上限-T as
backup:default backup:web backup:db
有一种方式,有点。 检查: http : //weblog.rubyonrails.org/2006/8/30/capistrano-1-1-9-beta/您将看到可以使用ROLES环境变量覆盖默认角色。
我的任务定义为:
desc "A simple test to show we can ssh into all servers" task :echo_hello, :roles => :test do run "echo 'hello, world!'" end
:test
角色分配给一台服务器。
在命令行上,我可以运行:
[james@fluffyninja bin]$ cap echo_hello ROLES=lots_of_servers
现在,任务将在lots_of_servers角色上运行。
我没有通过更新ENV
哈希validation这在ruby脚本中有效,但这是一个好的开始。
只有记录,这可能是使用Capistrano 3的解决方案:
desc "Do something specific for 3 different servers with 3 different roles" task :do_something do on roles(:api_role), in: :sequence do # do something in api server end on roles(:app_role), in: :sequence do # do something in application server end on roles(:another_role), in: :sequence do # do something in another server end end
在应用程序服务器中执行“do_something”任务的服务器定义类似于:
server 'application.your.domain', user: 'deploy', roles: %w{app_role}
然后你可以调用任务(有几种方法可以完成),任务将根据“app_role”执行特定的指令。
- 在Ruby中,如何判断字符串是否不在数组中?
- Ruby soap4r wsdl2ruby.rb错误
- 如何在markdown文件中传递和呈现ruby变量? gem“redcarpet”
- 任何类似教程的文章都解释了如何在Android上使用jRuby?
- 在轨道上的ruby中渲染带有类别的不同显示页面
- 使用will_paginate而不使用:total_entries可以改善冗长的查询
- 在Rails应用中连接到Google AnalyticsAPI
- 如何在Ruby中实现选项哈希?
- 错误:执行gem时…(Errno :: EINVAL)参数无效 – ./ActionDispatch/Routing/Mapper/Scoping/: