2

RailsのWheneverプラグインを使用して、特定の時間にモデルプロセスを実行しようとしています。私の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

script/runner -e development "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 プロセスを (コマンド ラインから) 手動で呼び出して、メール システムの機能をテストするにはどうすればよいでしょうか。

ありがとうございました!

4

2 に答える 2

3

メソッドをクラスメソッドではなくインスタンスmail_outメソッドとして定義したため、このエラーが発生しています。これを修正するには、メソッド定義行を (追加) に変更します。self.

def self.mail_out

コマンドラインからテストするには、次のようにします。

script/runner "User.mail_out"

何が起こったのかについてのフィードバックを得putsたいと思うかもしれません。print

于 2010-02-01T19:47:19.390 に答える
0

Class メソッドが正しく定義されていることを除いて、OP と同じエラーが発生していました (またはそう思っていました)。

モデル(間違った場所のように見えた)ではなく、コントローラー(正しい場所のように見えた)にメソッドを配置したことがわかりました。とにかく、メソッドをモデルに入れて、この問題を解決しました。

于 2011-08-30T11:52:10.053 に答える