【问题标题】:Sidekiq worker not getting triggeredSidekiq 工作人员没有被触发
【发布时间】:2012-09-30 17:46:00
【问题描述】:

我正在使用Sidekiq 进行后台工作:

我有一个工作应用程序/workers/data_import_worker.rb

class DataImportWorker
 include Sidekiq::Worker
 sidekiq_options retry: false

  def perform(job_id,file_name)
    begin
    #Some logic in it .....
  end
 end

从文件 lib/parse_excel.rb 调用

  def parse_raw_data
      #job_id and #filename are defined bfr
      DataImportWorker.perform_async(job_id,filename)   
  end

一旦我从我的操作中触发它,工作人员就不会被调用。Redis 正在 localhost:6379 上运行

知道为什么会发生这种情况。环境是 Linux。

【问题讨论】:

  • sidekiq 正在运行吗?它在日志中说了什么?你检查redis,作业是否添加到队列:默认?
  • @Roman:谢谢回复!是的,sidekiq 和 redis 都在运行 .. 作业也没有添加到默认队列中……但是当我从控制台触发作业时,它可以工作
  • 也许您在开发和生产中运行时有不同的数据库或命名空间。或者设置了不同的队列。
  • @Roman:没听懂你……你能详细说明一下吗?

标签: ruby-on-rails ruby nginx passenger sidekiq


【解决方案1】:

我在运行 Sidekiq 时遇到了类似的问题,但是当我调用 perform_async 时,它除了返回 true 之外什么也没做。

问题是 rspec-sidekiq 被添加到我的“:development, :test”组中。我通过将 rspec-sidekiq 移动到“:test”组解决了这个问题。

【讨论】:

  • 这是我的类似问题
  • 我遇到了同样的问题。我也必须重建我的捆绑包:bundle install --without test
  • 我在github.com/mperham/sidekiq/wiki/…添加了指向此答案的链接以供将来参考
  • 感谢您的回答,我正要把我的机器扔出窗外。
  • 另请参阅 github.com/philostler/rspec-sidekiq 以获取有关此潜在问题的电话
【解决方案2】:

从 Rails 应用的根目录启动 sidekiq。例如,

bundle exec sidekiq -e staging -C config/sidekiq.yml

【讨论】:

    【解决方案3】:

    我也遇到同样的问题,原来我在perform_async函数中传入的参数不合适,看来不应该在perform_async中传入任何查询结果,必须在函数perform中做所有查询.

    【讨论】:

      【解决方案4】:

      您需要指定 worker 所在队列的名称。

      示例: sidekiq_options 重试:假,:queue => data_import_worker

      data_import_worker 可以是你想给它起的任何名字。

      然后,当您进入 web 界面:yoursite.com/sidekiq,您将能够看到队列“data_import_worker”的当前工作人员

      【讨论】:

        【解决方案5】:

        对我来说,在执行 perform_later 时,它会进入队列但永远不会从队列中移除。我需要将我的队列名称添加到 sidekiq.yml 文件中

        ---
        :concurrency: 25
        :pidfile: ./tmp/pids/sidekiq.pid
        :logfile: ./log/sidekiq.log
        :queues:
          - default
          - my_queue
        

        【讨论】:

          【解决方案6】:

          为此浪费了 15 分钟。要检查 Sidekiq 是否正确加载了您的配置文件(带有队列名称),请转到“忙碌”选项卡中的 Web 界面,您会找到您的进程 ID,在它下方您会找到您的队列。

          在我们的例子中,我们拼错了mailer(Mailers 的正确 ActiveJob 队列是 mailers,复数形式)。

          【讨论】:

            【解决方案7】:

            我的问题只是将工作文件放在错误的路径中。

            需要在“project_root/app/worker/worker.rb”中,而不是“project_root/worker/worker.rb”中

            检查文件路径!

            【讨论】:

              【解决方案8】:

              它真的在独立的 sidekiq 上运行多个工人吗? 例如我有 2 名工人: 进程工作者 回调工人

              当我运行 sidekiq 时: bundle exec sidekiq -r ./workers/proccess_worker.rb -C ./config/sidekiq.yml

              同一时间只有一名工人。

              【讨论】:

                【解决方案9】:

                我在生产控制台中调用 perform_async(23),但是我的 sidekiq 是在暂存模式下启动的。

                在我以生产模式启动 Sidekiq 后,一切都开始运转良好。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-07-10
                  • 2018-11-05
                  • 2015-10-16
                  • 2012-10-05
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多