2013-12-11 86 views
0

我在我的Rails 4應用程序中添加了Sidekiq(沒有用perform_async做任何事情),並且當我做一個工作時,在我的情況下郵寄了一些東西,Rails抱怨沒有名爲delay的方法。這是我打電話:找不到Sidekiq延遲方法

MyMailer.delay.signup_notification(@user.id, @user.email)

我已經添加了寶石,看到bundle install列出的寶石(使用sidekiq 2.11.0),我在本地開發和使用Redis的運行bundle exec sidekiq沿服務器本地127.0.0.1:6379(默認端口6379)。

爲什麼找不到Sidekiq的方法定義?一個奇怪的事情是RubyMine可以跳轉到定義,但是當我運行Rails時,它會給出找不到delay的錯誤。我在Sidekiq的定義中看到,它應該將delay擴展到每個班級。

+0

它是否包含在某個特定的寶石組中,它可能未包含在您嘗試使用它的任何環境中? –

+0

我正在使用使用sidekiq的Rails引擎。該引擎在所有環境中都包含sidekiq。原來我需要在我的應用和引擎中包含sidekiq(我覺得很奇怪)。 – Jack

回答

1

嘗試在控制檯中運行gem "sidekiq"。如果它返回true,請嘗試運行此代碼段:

class TestMailer < ActionMailer::Base; def x; end; end; TestMailer.delay 

您應該從Redis獲得一些輸出。

如果第一個命令失敗,那麼您的Gemfile中沒有正確包含sidekiq。如果第二個命令失敗,你在MyMailer類中做了一些奇怪的事情。

記住,如果你在development環境中運行Rails的控制檯(如果你不知道,你可能是,但你可以Rails.env檢查),你需要讓development必須在獲得寶石Gemfile

+0

我正在使用Rails引擎,這是使用sidekiq的東西。該引擎在其gem文件中包含了sidekiq,所以我假定如果包含引擎,它也會包含sidekiq。事實證明,情況並非如此。除了它已經在引擎中之外,我通過將sidekiq添加到我的應用程序來解決它。感謝您幫助調試! – Jack