我目前正在使用Resque
我的后台进程,但最近我听到了很多关于sidekiq
.有人可以比较/区分吗?
特别是我想知道有没有办法以编程方式监控工作是否完成 sidekiq
我在Rails应用程序中使用sidekiq作为后台任务.现在工作的数量变得更多,所以我想清除所有的工作.我在控制台中尝试了以下命令
Sidekiq::Queue.new.clear
Run Code Online (Sandbox Code Playgroud)
但它给出了以下错误.
NameError: uninitialized constant Sidekiq::Queue
Run Code Online (Sandbox Code Playgroud)
如何清除sidekiq的所有工作?
我习惯使用delayed_jobs方法进入控制台查看队列中的内容,以及在需要时清除队列的难易程度.Sidekiq中有类似的命令吗?谢谢!
我是这个永远奔跑的工人.
class Worker
include Sidekiq::Worker
sidekiq_options queue: "infinity", retry: true
def perform(params)
# ...
self.class.perform_in(30.seconds, params)
end
end
Run Code Online (Sandbox Code Playgroud)
问题是我在启动时加载工人,就像这样. config/initializers/load_workers.rb
Rails.application.config.after_initialize do
if ENV["SIDEKIQ"] == "1"
Worker.perform_async({})
end
end
Run Code Online (Sandbox Code Playgroud)
用这个来启动sidekiq SIDEKIQ=1 sidekiq --verbose --environment production -C config/sidekiq.yml
.
这意味着老工人要停下来,既有目前正在运行的人,也有被重新安排的人.
我尝试在启动时运行它(在加载新工作之前),但这不起作用.
q = []
q += Sidekiq::RetrySet.new.select { |job| job.klass.match(/Worker/) }
q += Sidekiq::Queue.new("infinity").select { |job| job.klass.match(/Worker/) }
q += Sidekiq::ScheduledSet.new.select { |job| job.klass.match(/Worker/) }
q.each(&:delete)
Run Code Online (Sandbox Code Playgroud)
在5-ish部署之后,队列中有大量重复的工作程序安排在稍后.那么,有没有办法清除一个队列中的每一个并阻止已经重新安排的作业?
我正在使用sidekiq 3.0.
Sidekiq可能会阻止处理队列中的作业有什么可能的原因?队列已满.日志文件sidekiq.log
表示根本没有活动.因此队列已满,但日志为空,而Sidekiq似乎不处理项目.似乎没有工人处理工作.重新启动Redis或使用FLUSHALL或FLUSHDB将其刷新为无效.Sidekiq已经开始了
捆绑exec sidekiq -L log/sidekiq.log
并生成以下日志文件:
2013-05-30..Booting Sidekiq 2.12.0 using redis://localhost:6379/0 with options {}
2013-05-30..Running in ruby 1.9.3p374 (2013-01-15 revision 38858) [i686-linux]
2013-05-30..See LICENSE and the LGPL-3.0 for licensing details.
2013-05-30..Starting processing, hit Ctrl-C to stop
Run Code Online (Sandbox Code Playgroud)
你怎么知道出了什么问题?有没有隐藏的日志文件?
我在rails应用程序中使用sidekiq.默认情况下,任何人都可以通过在网址后附加"/ sidekiq"来访问Sidekiq.我想密码保护/验证sidekiq部分.我怎样才能做到这一点?
在我的sidekiq仪表板中,我在左边看到一个带有计数器的盒子
Processed 168
Failed 111
Busy 0
Scheduled 0
Retries 0
Enqueued 0
Run Code Online (Sandbox Code Playgroud)
如何将它们全部重置为0?
目前,我有一个像这样的sidekiq工作:
class SyncUser
include Sidekiq::Worker
def perform(user_id)
#do stuff
end
end
Run Code Online (Sandbox Code Playgroud)
我正在这样的队列中找到一份工作:
SyncUser.perform_async user.id
Run Code Online (Sandbox Code Playgroud)
当然这一切都有效但调用perform_async和实际执行的作业之间存在一点滞后.
还有什么我可以告诉sidekiq立即执行这项工作吗?
我有一个apache + passenger服务器.
我将如何sidekiq
在生产中运行?运行所需的任何配置
bundle exec sidekiq
Run Code Online (Sandbox Code Playgroud)
谢谢
Sidekiq一直在开发模式中完美地工作.既然我正在尝试在生产中使用它,那么所有的工作都只是坐在队列中,而不是一直在运行.任何人都可以指出我如何解决这个问题的正确方向?