2011-06-08 12 views
1

私はdelayed_job宝石の使用を検討し始めました。それをテストするDelayed_job in railsが失敗しました

、私は歓迎メール機能に「遅延」を追加し、これは、Userモデルのafter_create内部で呼び出され

UserMailer.welcome_email(self).deliver 

から

UserMailer.delay.welcome_email(self) 

にそのコールを変更しました。関数が実行された後、delayed_jobテーブルにエントリが表示されます。今、私は「すくいの仕事:仕事」を実行し、コマンドラインでタスクを開始するが、私は

def self.welcome_email(user) 

(とクラスメソッドにwelcome_emailメソッド宣言を変更した場合と考え

[Worker(host:Sanjay-PC pid:7008)] Starting job worker 
[Worker(host:Sanjay-PC pid:7008)] Class#welcome_email failed with NoMethodError: undefined method `welcome_email' for #<Class:0x4871d60> - 0 failed attempts 
[Worker(host:Sanjay-PC pid:7008)] 1 jobs processed at 0.0939 j/s, 1 failed ... 

以下のようにエラーが発生します追加された自己の前に)助けるかもしれません。しかし、私は熊手のジョブを実行するときに:仕事は、私は次のエラー

rake aborted! 
undefined method `welcome_email' for class `UserMailer' 
C:/Ruby192/lib/ruby/gems/1.9.1/gems/activesupport-3.0.5/lib/active_support/core_ext/module/aliasing.rb:31:in `alias_method' 
C:/Ruby192/lib/ruby/gems/1.9.1/gems/activesupport-3.0.5/lib/active_support/core_ext/module/aliasing.rb:31:in `alias_method_chain' 
C:/Ruby192/lib/ruby/gems/1.9.1/gems/delayed_job-2.1.4/lib/delayed/message_sending.rb:50:in `handle_asynchronously' 
c:/mgn/mgn-r3/app/mailers/user_mailer.rb:10:in `<class:UserMailer>' 
c:/mgn/mgn-r3/app/mailers/user_mailer.rb:1:in `<top (required)>' 
C:/Ruby192/lib/ruby/gems/1.9.1/gems/activesupport-3.0.5/lib/active_support/dependencies.rb:454:in `load' 
<Stack truncated> 

を得ることは今UserMailerとしてクラスを知っているようだが、それは何らかの形でクラスメソッドwelcome_emailは表示されません。

私はRailsの3.0.5にしていますが、Rubyの1.9.2p180およびインストールdelayed_job宝石は2.1.4です -

のWindows

上の任意の場所に関連するすべての答えを見つけるように見えることはできません。

あなたの考えをありがとう。

-S

私のソリューションは、(あなたのためにそれがUserMailerクラスだ)

def self.taguri 
    'tag:ruby.yaml.org,2002:class' 
end 

がそれだハンドラクラスで機能を再定義することでした

class UserMailer < ActionMailer::Base 
    default :from => "[email protected]" 

    def welcome_email(user) 
    @user = user 
    @url = "http://example.com/login" 
    mail(:to => user.email, 
     :subject => "Welcome to My Awesome Site") 
    end 
end 
+0

お使いのメーラークラスのコードを追加してください使用して 'UserMailer.welcome_email(自己)でした。仕事を送りますか? – pjammer

答えて

1

@ pjammerのリクエストごとにUserMailerコードを追加しますハックと私はより良い解決策を見つけることを試みるが、今それは私のために働く。

(Railsの3.0.9、Rubyの1.9.2-P290、delayed_job 2.1.4)

2

ちょうどこの

UserMailer.delay.welcome_email(self).deliver 

代わりの

UserMailer.welcome_email(self).delay.deliver