Всякий раз, когда Плагин Помощь - PullRequest
2 голосов
/ 01 февраля 2010

Я пытаюсь использовать плагин 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

Когда я пытаюсь запустить команду сценария / запуска -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 (из командной строки) для проверки работоспособности моей почтовой системы.

Спасибо!

Ответы [ 2 ]

3 голосов
/ 01 февраля 2010

Вы получаете эту ошибку, потому что вы определили метод mail_out как метод instance вместо метода class . Чтобы исправить это, измените строку определения метода на (добавьте self.):

def self.mail_out

Чтобы проверить это из командной строки, сделайте что-то вроде этого:

script/runner "User.mail_out"

Возможно, вы захотите puts или print что-то, чтобы вы получили отзыв о том, что произошло.

0 голосов
/ 30 августа 2011

Я получал ту же ошибку, что и OP, за исключением того, что у меня был правильно определен метод Class (или я так думал).

Оказалось, что я поместил метод в Controller (который выглядел как правильное место) вместо Model (который выглядел как неправильное место). В любом случае, добавление метода в Модель решило эту проблему для меня.

...