【问题标题】:Invoke delayed_job capistrano tasks only on specific servers仅在特定服务器上调用 delay_job capistrano 任务
【发布时间】:2011-11-04 20:37:34
【问题描述】:

我有一个用于延迟作业任务的专用服务器。我想在此服务器上启动、停止和重新启动 delay_job 工作人员。我正在使用delayed_job 提供的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"

现在我想让这些钩子应用于单独的延迟作业服务器 (role :delayed_job <ip address>)。这可以优雅地做到吗?我是否必须将每个delayed_job 任务包装在元任务中?还是自己写任务,不使用延迟作业提供的任务?

【问题讨论】:

    标签: ruby capistrano delayed-job


    【解决方案1】:

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

    default delayed_job Capistrano recipe 似乎是这样做的。

    desc "Stop the delayed_job process"
    task :stop, :roles => lambda { roles } do
      run "cd #{current_path};#{rails_env} script/delayed_job stop"
    end
    

    根据源码,任务从:delayed_job_server_role配置变量中获取角色列表。

    回到您的问题,要将任务的执行范围缩小到特定的服务器组,请在您的 deploy.rb 中定义一个新角色(例如工作人员)

    role :worker, "192.168.1.1" # Assign the IP of your machine
    

    然后将:delayed_job_server_role 设置为该名称

    set :delayed_job_server_role, :worker
    

    就是这样。现在任务将被执行,但仅限于:worker 角色中列出的服务器。

    【讨论】:

    • 耶!我太高兴了。 (我会在他们的维基上记录那个标志......)
    猜你喜欢
    • 2011-09-25
    • 2012-06-18
    • 2011-03-24
    • 1970-01-01
    • 2016-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-03
    相关资源
    最近更新 更多