2

我正在尝试使用 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

当我尝试运行 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方法定义为实例方法而不是方法。要修复它,请将方法定义行更改为 (add self.):

def self.mail_out

要从命令行对其进行测试,请执行以下操作:

script/runner "User.mail_out"

您可能想要putsprint某些东西,以便您对所发生的事情获得一些反馈。

于 2010-02-01T19:47:19.390 回答
0

我遇到了与 OP 相同的错误,除了我确实正确定义了 Class 方法(或者我认为如此)。

事实证明,我将方法放在了 Controller(看起来是正确的位置)而不是 Model (看起来像错误的位置)。无论如何,将方法放入模型中为我解决了这个问题。

于 2011-08-30T11:52:10.053 回答