Передача аргументов задаче rake из модели не работает

Я пытаюсь вызвать задачу rake, чтобы отправить электронное письмо в список подписчиков от действия контроллера, такого как so:

Действие контроллера:

def send_digest
   @article_ids = params[:article_ids]
   @subject = params[:subject]
   EmailDigest.send_email_digest("weekly_digest_task", @article_ids, @subject)

   redirect_to new_digests_path
end

email_digest.рубидий:

require 'rake'

class EmailDigest < ActiveRecord::Base

  def self.send_email_digest(weekly_digest_task, article_ids, subject)
    load File.join(Rails.root, 'lib', 'tasks', 'send_email_digest.rake')
    Rake::Task['weekly_digest_task'].invoke("\"#{article_ids}\"","\"#{subject}\"")
  end

end

А вот send_email_digest.выгребать:

task :weekly_digest_task, [:article_ids,:subject] => :environment do |task, args|

  articles = args.article_ids
  subject = args.subject
  article_objects = []

  articles.each do |m|
    article_objects << Article.find_by_id(m)
  end

  EmailDigest.all.each do |subscriber|
    DigestMailer.weekly_digest(subscriber, article_objects, subject).deliver
  end

end

Перенаправление происходит, и я принимаюсь на эту страницу без ошибок, однако никакие письма не отправляются. Поэтому я понятия не имею, почему это не работает.

Есть идеи?

1 ответ

  1. Вы передаете строку в задачу, поэтому, если вы не извлекаете массив идентификаторов из строки, вы по существу перечисляете по строке, а не по элементам. Я хотел бы знать, какую версию ruby вы используете, потому что в 1.9+ строка больше не является перечисляемой, и поэтому вы должны получать ошибку.

    Однако все это не обязательно, так как вы можете напрямую передать массив для вызова.

    Ваш код также излишне запутан. Особенно не рекомендуется loadподавать из метода (так как это приведет к тому, что содержимое файла будет оцениваться при каждом вызове метода). Это может быть required наверху.

    В идеале было бы лучше, если вы переместите логику из задачи rake в метод в модели или посредника и просто вызовите его как из задачи rake, так и из почтовой программы.