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