2010-02-01 67 views
2

我想使用Whenever插件for rails在特定時間執行模型過程。我schedule.rb如下:每當插件幫助

every 1.day, :at => '5:30 am' do 
    runner "User.mail_out" 
    end 

我的模型如下:

class User < ActiveRecord::Base 

    acts_as_authentic 

    def mail_out 

    weekday = Date.today.strftime('%A').downcase 

    @users = find(:conditions => "#{weekday}sub = t") 

    @users.each { |u| UserMailer.deliver_mail_out(u)} 


    end 

end 

當我試圖運行腳本/亞軍-e發展「User.mail_out」命令,我得到的以下錯誤:

/var/lib/gems/1.8/gems/rails-2.3.5/lib/commands/runner.rb:48: undefined method `mail_out' for #<Class:0xb708bd50> (NoMethodError) 
    from (eval):1 
    from /usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `eval' 
    from /var/lib/gems/1.8/gems/rails-2.3.5/lib/commands/runner.rb:48 
    from /usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require' 
    from /usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `require' 
    from script/runner:3 

任何人都可以指出哪裏出了問題?另外,如何手動調用mail_out進程(從命令行)來測試我的郵件系統的功能。

謝謝!

回答

3

你收到這個錯誤,因爲你已經定義了mail_out方法爲實例方法,而不是一個方法。要修復它,改變方法定義行(添加self.):

def self.mail_out 

要通過命令行測試,做這樣的事情:

script/runner "User.mail_out" 

你可能想putsprint東西所以你會對發生的事情得到一些反饋。

+0

謝謝你的幫助。現在我得到一個新的錯誤,我更新了我的帖子。我還包括我的郵件腳本。任何不工作的想法? – 2010-02-01 20:11:14

+0

好問題,但請在發佈答案後儘量避免顯着改變您的問題。本網站的目標是建立一個網頁集合,對特定問題做出有用的迴應,不僅針對問題提問者,而且針對整個開發社區,包括任何未來閱讀此頁的人。你的新問題與原始問題無關(不完全是你的錯 - 它可能看起來有關係),所以將它作爲一個新問題發佈會更清楚。 (另外,這是我給你的第二個有用的答案 - 看你以前的問題 - 如何投票?) – 2010-02-01 20:48:24

+0

對不起,我仍然得到這個網站的掛鉤。我會發佈一個新問題。我標記了你的答案:)感謝您的幫助。 – 2010-02-01 21:16:26

0

我得到了與OP相同的錯誤,除了我確實有正確定義的類方法(或者我認爲)。

原來,我把方法放在控制器(看起來像正確的地方),而不是模型(看起來像錯誤的地方)。無論如何,將該方法放在模型中爲我解決了這個問題。