我正在将Sidekiq添加到我的Rails 4应用程序中(没有对perform_async
做任何事情),当我在delay
工作时,在我邮件的情况下,Rails抱怨没有名为delay
的方法。这就是我所说的:
MyMailer.delay.signup_notification(@user.id, @user.email)
我添加了gem并看到bundle install
列出了gem(使用sidekiq 2.11.0),我正在本地开发并在127.0.0.1:6379(默认端口6379)本地运行bundle exec sidekiq
和Redis服务器。
为什么找不到Sidekiq的方法定义?一个奇怪的事情是RubyMine可以跳转到定义,但是当我运行Rails时,它会给出错误,即找不到delay
。我在Sidekiq的定义中看到它应该将delay
扩展到每个类。
尝试在控制台中运行gem "sidekiq"
。如果返回true,请尝试运行此代码段:
class TestMailer < ActionMailer::Base; def x; end; end; TestMailer.delay
您应该从Redis获得一些输出。
如果第一个命令失败,则不会在sidekiq
中正确包含Gemfile
。如果第二个命令失败,你在MyMailer
类中做了一些奇怪的事情。
请记住,如果你在development
环境中运行Rails控制台(如果你不知道,你可能会,但你可以查看Rails.env
)你需要让development
访问Gemfile
中的gem。
只是有类似的东西......但是由Sidekiq更新引发。
https://github.com/mperham/sidekiq/wiki/Delayed-extensions说,
它们在Sidekiq 5+中默认禁用。使用Sidekiq :: Extensions.enable_delay!打开它们。
添加Sidekiq :: Extensions.enable_delay!到初始化器