在Rails应用程序启动时队列Sidekiq工作

And*_*Gil 2 ruby ruby-on-rails sidekiq

当我的Rails应用程序启动时,我需要向Sidekiq队列添加一个作业,以更新一些数据,但我不知道哪里是最好的地方.

现在,我已经写了这个application.rb:

class Application < Rails::Application
    config.after_initialize do
        MyWorker.perform_async
    end
end
Run Code Online (Sandbox Code Playgroud)

但问题是当我运行sidekiq命令时它还会加载Rails堆栈,所以我最终会在队列中找到2个作业.

还有其他办法吗?这是我的第一个大Rails应用程序,也是我第一次使用Sidekiq,所以我不知道我是不是正确理解了.这可能不是这样做的正确方法.

谢谢!

mel*_*alj 6

更好的解决方案是创建初始化程序 config/initializers/sidekiq.rb

Sidekiq.configure_client do |config|
    Rails.application.config.after_initialize do
        # You code goes here
    end
end
Run Code Online (Sandbox Code Playgroud)


Jos*_*osh 5

我们遇到了与Redis连接和多个工作正在启动的问题.

我最终使用它,它似乎运作良好:

if defined?(Sidekiq)
  Sidekiq.configure_server do |config|
    config.on(:startup) do
      already_scheduled = Sidekiq::ScheduledSet.new.any? {|job| job.klass == "MyWorker" }
      MyWorker.perform_async unless already_scheduled
    end
  end
end
Run Code Online (Sandbox Code Playgroud)