Всякий раз, когда справка по плагину

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

Спасибо!


person Trevor Nederlof    schedule 01.02.2010    source источник


Ответы (2)


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

def self.mail_out

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

script/runner "User.mail_out"

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

person Alex Reisner    schedule 01.02.2010
comment
Спасибо вам за помощь. Теперь я получаю новую ошибку, я обновил свой пост выше. Также я включил свой почтовый скрипт. Любые идеи о том, что не работает? - person Trevor Nederlof; 01.02.2010
comment
Хороший вопрос, но, пожалуйста, постарайтесь воздержаться от значительных изменений вопроса после публикации ответа. Цель этого сайта — создать коллекцию веб-страниц с полезными ответами на конкретные вопросы не только для тех, кто задает вопросы, но и для всего сообщества разработчиков, включая всех, кто будет читать эту страницу в будущем. Ваш новый вопрос не связан с исходным (не совсем ваша вина - он может показаться связанным), поэтому было бы понятнее опубликовать его как новый вопрос. (Кроме того, это второй полезный ответ, который я вам дал — см. ваши предыдущие вопросы — как насчет голосования?) - person Alex Reisner; 01.02.2010
comment
Извините, я все еще разбираюсь в этом сайте. Я опубликую новый вопрос. И я отметил ваши ответы :) Спасибо за помощь. - person Trevor Nederlof; 02.02.2010
comment
Тревор, не беспокойтесь - спасибо за голоса! Я бы ответил на твой новый вопрос, но меня не было несколько часов. До встречи на сайте и удачи в ваших проектах. - person Alex Reisner; 02.02.2010

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

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

person Snips    schedule 30.08.2011