每当插件帮助

时间:2010-02-01 19:25:40

标签: ruby-on-rails ruby-on-rails-plugins whenever

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

当我尝试运行脚本/ runner -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进程(从命令行)来测试我的邮件系统的功能。

谢谢!

2 个答案:

答案 0 :(得分:3)

您收到该错误是因为您已将mail_out方法定义为实例方法而非方法。要解决此问题,请将方法定义行更改为(添加self.):

def self.mail_out

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

script/runner "User.mail_out"

您可能需要putsprint某些内容,以便对所发生的事情获得一些反馈。

答案 1 :(得分:0)

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

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