【问题标题】:Unable to start worker after rake task ruby on railsrake task ruby​​ on rails 后无法启动工作人员
【发布时间】:2016-05-10 08:16:24
【问题描述】:

我在这里阅读了许多问题,但到目前为止还没有人帮助我。

场景:我正在使用按钮单击启动 rake 任务,它也启动了 rake 任务,但问题是它没有激活 worker。

这是我的按钮点击代码:

def run_rake_jobs
   Resque.enqueue(ImportJobs)
   puts Resque.info, "**************************************************"
   flash[:notice] = "Importing Jobs Now"
   redirect_to :back
end

任务代码:

module Refinery
  module Titans
    class ImportJobs
      @queue = :import_jobs
      def self.perform
        system "rake st:import_jobs"
      end
    end
  end
end

我如何启动工人?我已经尝试了所有可能的技巧,但对我不起作用。

【问题讨论】:

    标签: ruby-on-rails ruby resque refinerycms


    【解决方案1】:

    run_rake_jobs 中的代码仅将 ImportJobs 后台作业排入 redis 上的队列,但不会触发其执行。控制器中的代码继续执行而不会中断。

    要实际运行排队的作业,您需要调用单独的命令(通常是在 rails 代码之外),例如 rake resque:work,有关详细信息,请参阅 resque readme

    这种运行后台作业的模式很典型:在您的 Rails 代码中,您只排队应该在后台运行的作业。然后,有一个单独的进程从队列中获取后台作业并使用一个或多个工作人员运行它们。通过这种方式,您可以将长时间运行的任务与 Rails 主代码分离。

    【讨论】:

    • 明白你的观点,但我应该在哪里写那段代码?有什么具体的地方吗?基本上我希望他们在后台工作,而不是每次在控制台中写rake resque:work
    • rake resque:work 是一个独立的、永久运行的进程,它会定期轮询队列以获取新作业,否则会休眠。因此,实际上您只需在服务器启动后一次 在控制台中运行该命令。通常这是在服务器启动时在初始化脚本中完成的。您会在 Internet 上找到许多示例初始化脚本,例如here.
    • 好的,没关系。你这么说是对的。那么,这是解决这个问题的唯一方法吗?我不想用 bash 或 init 脚本使我的服务器崩溃。 :)
    • 抱歉,我不知道其他方式。但这不应该那么难。如果您使用 rvm,最困难的部分是确保适当的 ruby​​ / rails 环境。但是这里有多个教程和答案。
    • 没问题。 :) 你能在这里显示一些链接吗?谢谢。
    猜你喜欢
    • 2023-02-08
    • 1970-01-01
    • 1970-01-01
    • 2015-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-05
    • 1970-01-01
    相关资源
    最近更新 更多