【问题标题】:Sidekiq worker enqueues but doesn't complete when paired with SidetiqSidekiq 工作人员排队,但与 Sidetiq 配对时未完成
【发布时间】:2014-05-14 00:37:26
【问题描述】:

我有一个 Sidekiq 工作程序,它将 Rails 3.2 应用程序的数据与远程数据库同步。当我从 Rails 控制台执行它时,一切都按预期工作。我可以验证它是否连接到远程数据库并提取我期望的数据。

我尝试设置以下内容的那一刻:

recurrence {daily.hour_of_day(20).minute_of_hour(02)}

我在 Sidekiq 中看到以下内容,但没有完成/执行的迹象:

2014-05-14T00:02:18Z 6747 TID-dvc2c INFO: [Sidetiq] Enqueue: BackendWorker (at: 1400112120.0) (last: -1.0)

我目前已将 retries 设置为 false(我想更改它),并且在再次设置另一个测试运行之前,我已尝试清除 redis 中的任何内容。

有没有办法收集更多关于正在发生的事情的信息?我可以使用 Sidekiq 标志来获取一些额外的调试信息吗?

提前致谢

环境:

  • Rails 3.2
  • Ruby 2.1
  • Sidetiq 0.5.0
  • Sidekiq 2.17.7(由于使用 3.0 的问题)

更新(2014 年 5 月 14 日):

我决定用 Sidetiq 测试一个简单的例子,然后让一个工人用 ActiveRecord 创建一个数据库条目:

class BackendTest
  include Sidekiq::Worker
  include Sidetiq::Schedulable
  sidekiq_options :retry => false, :backtrace => true

  recurrence {
    daily.hour_of_day(11).minute_of_hour(05)
  }

  def perform
    Book.create(title: "test", author: "testing", price: 9.99)
  end
end

我做的另一个实验只是试图让 Sidetiq 和 Sidekiq 用 logger.info 显示一些东西:

class BackendTest
  include Sidekiq::Worker
  include Sidetiq::Schedulable
  sidekiq_options :retry => false, :backtrace => true

  recurrence {
    daily.hour_of_day(16).minute_of_hour(00)
  }

  def perform
    logger.info "test"
    logger.info "test"
  end
end

作业仍然进入默认队列,没有开始或完成。如果我只是从带有perform_asyncSidekiq::Client.pushSidekiq::Client.enqueue 的r​​ails 控制台启动它,那么一切仍然可以在控制台上工作。

在这一点上,我是一个完全糊涂的新手。

输出:

2014-05-14T20:08:41Z 2149 TID-dfcfk BackendTest JID-6bc7ba08955f8340903f9063 INFO: start 2014-05-14T20:08:41Z 2149 TID-dfcfk BackendTest JID-6bc7ba08955f8340903f9063 INFO: test 2014-05-14T20:08:41Z 2149 TID-dfcfk BackendTest JID-6bc7ba08955f8340903f9063 INFO: test 2014-05-14T20:08:41Z 2149 TID-dfcfk BackendTest JID-6bc7ba08955f8340903f9063 INFO: done: 0.002 sec

【问题讨论】:

    标签: ruby-on-rails sidekiq sidetiq


    【解决方案1】:

    在 github 上浏览了其他人的项目后,我看到了一些有趣的东西并尝试了一下,它似乎解决了我使用 Sidetiq 的问题。

    我创建了/config/initializers/sidekiq.rb,其中包含以下内容:

    Sidekiq.configure_server do |config|
      config.redis = { :url => 'redis://localhost:6379/3', :namespace => 'sidekiq' }
    end
    
    Sidekiq.configure_client do |config|
      config.redis = { :url => 'redis://localhost:6379/3', :namespace => 'sidekiq' }
    end
    

    作业任务按预期排队并执行。

    【讨论】:

      猜你喜欢
      • 2014-01-20
      • 2013-09-29
      • 2013-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-10
      • 2018-11-05
      • 1970-01-01
      相关资源
      最近更新 更多