【发布时间】:2017-05-20 09:37:12
【问题描述】:
我们正在使用 Sidekiq 和 Rails 5 推出一个新应用。我们正在利用 Redis 存储作业,但由于某种原因,无论是在本地还是在我们的开发区,这些作业似乎都没有传递到 Redis。
当代码自行执行以及通过 IRB 执行时,通知似乎已正确发送。
[10] pry(main)> Notifications::WelcomeWorker.perform_async(1)
=> "1a1447c488f173fb09b212f7"
查看 Redis,我们有失败和已处理的密钥(都说 0),但没有任何待处理的密钥,这让我相信它甚至由于某种原因没有命中 Redis。
我们的 Redis 配置设置在 config/sidekiq.yml 中,它只是设置并发和 PID 位置。
我们在 initializers/sidekiq.rb 中也有一个初始化文件
Sidekiq.configure_server do |config|
config.redis = { url: ENV["SIDEKIQ_REDIS"] , namespace: 'abcbh', network_timeout: 5 }
end
Sidekiq.configure_client do |config|
config.redis = { url: ENV["SIDEKIQ_REDIS"] , namespace: 'abcbh', network_timeout: 5 }
end
SIDEKIQ_REDIS 在本地翻译为 redis://localhost 和 dev 上的相关 URL。
一切似乎都运行良好,但作业似乎没有出现在 Redis 中。
我在睡眠剥夺中缺少什么吗?
worker 本身在 app/workers/notifications/welcome_worker.rb 中设置
在 app/workers/notifications/welcome_worker.rb 我们有以下代码,尽管它永远不会被执行。
require 'sendgrid-ruby'
include SendGrid
class Notifications::WelcomeWorker
include Sidekiq::Worker
sidekiq_retries_exhausted do |msg, e|
Sidekiq.logger.warn "Failed #{msg['class']} with #{msg['args']}: #{msg['error_message']}"
end
def perform(email_id)
Sidekiq.logger.info "Beginning Welcome Email For #{email_id}"
...
end
end
【问题讨论】:
-
你在环境中启动sidekiq了吗?
-
是的。在我的本地打开两个终端窗口,一个为我的 IRB 运行 bin/rails -c,另一个运行 bundle exec sidekiq -c config/sidekiq.yml
-
您是否指定了
RAILS_ENV?我曾经遇到过类似的问题,但只是过度阅读,sidekiq 将无法在development环境中运行(几个版本前 - 不知道这是否是默认行为)。您查看sidekiq.log是否有任何错误?其他问题可能是日志级别...根据您的配置显示的级别太低。 -
赞成这个,因为它与问题有关。我的回答澄清了这一点,但它不能在开发中运行的原因是因为 rspec-sidekiq。不过,我仍在尝试理解其中的原因。它似乎根本没有很好的记录。
标签: ruby-on-rails sidekiq