【问题标题】:Syntax question for delayed_jobs and emaildelay_jobs 和 email 的语法问题
【发布时间】:2010-09-16 22:29:38
【问题描述】:

我收到一个漂亮的错误:

failed with NoMethodError: You have a nil object when you didn't expect it!
You might have expected an instance of ActiveRecord::Base.
The error occurred while evaluating nil.[] - 3 failed attempts

我的控制者:

CardSignup.all.each do |user|
  Delayed::Job.enqueue MassEmail.new(user, params[:subject], params[:editor1])
end

ma​​ss_email.rb

class MassEmail < Struct.new(:user, :subject, :message)
  def perform
    Notifier.deliver_email_blast(user, subject, message)
  end
end

_form.html.haml

- form_tag admin_email_blast_path do
  Subject
  %br
  = text_field_tag 'subject'
  %br
  Body
  %br
  = text_area_tag 'message', '', :name => 'editor1'
  %br
  = submit_tag 'Send Email', :class => 'button'

  :plain
    <script type="text/javascript">
    CKEDITOR.replace( 'editor1' );
    </script>

问题是因为我没有正确传递变量..我该如何正确地做到这一点?

注意:在我使用 params[:subject] 和 params[:editor1] 实现 delay_jobs 之前它运行良好,所以我必须以某种方式保留它们。

我在没有Delayed_Jobs 的情况下尝试了这个,MassEmail.new 甚至没有在我的日志中留下回溯。

我也在我的控制台中尝试过这个,但它冻结了。

mass_email.rb 或def perform 中的电话肯定有​​问题

【问题讨论】:

  • 很高兴知道NoMethodError 是在哪里提出的。
  • 我如何找到它?这是它的前身 2010-09-14T11:57:18-0400: * [Worker(delayed_job host:Daniel-Levines-iMac-3.local pid:754)] 在 MassEmail 2010-09-14T11:57 上获得锁定: 18-0400: * [作业] 延迟作业主机:Daniel-Levines-iMac-3.local pid:754
  • 对不起,但这没有帮助。通常你会得到一个完整的回溯,并且在 ErrorMeassage 附近必须是这样的:some_path/some_file.rb:213
  • 是的..即使我把它从延迟的工作中取出,它甚至不会报告错误。疯了吧?

标签: ruby-on-rails ruby actionmailer delayed-job


【解决方案1】:

这绝对是错误的,你给了两个同名的参数:

class MassEmail < Struct.new(:user, :params, :params)

perform 方法现在你指的是哪个参数?

你可以试试这样的

class MassEmail < Struct.new(:user, :subject, :editor1)
  def perform
    Notifier.deliver_email_blast(user, subject, editor1)
  end
end

【讨论】:

  • 好吧,至少它在语法上更上一层楼。但它仍然返回相同的错误。我会给出更好的跟踪,但它通过延迟工作失败。
  • 我认为这是错误的,因为我在 MassEmail.new 中的表单中调用的变量无法通过?
【解决方案2】:

感谢 JigFox 让我正确编写参数。

我不完全确定为什么会这样,但我将循环移到 MassEmail.new 函数中。

Delayed::Job.enqueue MassEmail.new(params[:subject], params[:editor1])

class MassEmail < Struct.new(:subject, :editor1)
  def perform
    CardSignup.all.each do |user|
      Notifier.deliver_email_blast(user, subject, editor1)
    end
  end
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-19
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-13
    相关资源
    最近更新 更多