Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 仅在特定服务器上调用延迟的\u作业capistrano任务_Ruby_Capistrano_Delayed Job - Fatal编程技术网

Ruby 仅在特定服务器上调用延迟的\u作业capistrano任务

Ruby 仅在特定服务器上调用延迟的\u作业capistrano任务,ruby,capistrano,delayed-job,Ruby,Capistrano,Delayed Job,我有一个专门的服务器来处理延迟的工作任务。我只想启动、停止和重新启动此服务器上的延迟工作人员。我正在使用延迟工作提供的capistrano配方 当我只有一台服务器时,这是我的配置: before "deploy:restart", "delayed_job:stop" after "deploy:restart", "delayed_job:start" after "deploy:stop", "delayed_job:stop" after "deploy:start", "d

我有一个专门的服务器来处理延迟的工作任务。我只想启动、停止和重新启动此服务器上的延迟工作人员。我正在使用延迟工作提供的capistrano配方

当我只有一台服务器时,这是我的配置:

before "deploy:restart", "delayed_job:stop"
after  "deploy:restart", "delayed_job:start"

after "deploy:stop",    "delayed_job:stop"
after "deploy:start",   "delayed_job:start"

现在,我只想让那些钩子应用于一个单独的延迟作业服务器(
角色:延迟作业
)。这能做到优雅吗?我是否必须将每个延迟的工作任务包装在元任务中?或者编写我自己的任务,而不使用延迟作业提供的任务?

在Capistran中定义任务时,您可以将任务的执行限制为特定角色。执行此操作的方法是通过传递
:role
选项

这似乎是政府所做的

desc "Stop the delayed_job process"
task :stop, :roles => lambda { roles } do
  run "cd #{current_path};#{rails_env} script/delayed_job stop"
end
根据源代码,任务从
:delayed\u job\u server\u role
配置变量获取角色列表

回到您的问题,要将任务的执行范围缩小到特定的服务器组,请在
deploy.rb

role :worker, "192.168.1.1" # Assign the IP of your machine
然后将
:delayed\u job\u server\u角色设置为该名称

set :delayed_job_server_role, :worker
就这些。现在任务将被执行,但只对
:worker
角色中列出的服务器执行。

耶!我很高兴。(我会在他们的维基上记录这面旗帜…)