【问题标题】:Delay email sending in Rails?在 Rails 中延迟电子邮件发送?
【发布时间】:2011-07-01 05:43:54
【问题描述】:

我正在使用delayed_job 来延迟将信息从我的应用程序发送到FreeagentCentral(一个会计软件包)。同时它还使用 PostmarkApp 的 gem 发送两封电子邮件。

# POST /kases
# POST /kases.xml
def create
@company = Company.find(params[:kase][:company_id])
@kase = @company.kases.create!(params[:kase])

respond_to do |format|
UserMailer.delay.deliver_makeakase("email@address.com", "Highrise", @kase) if    params[:sendtohighrise]
UserMailer.delay.deliver_makeakaseteam("email2@address.com", "Highrise", @kase) if params[:notify_team_of_creation]
@kase.delay.create_freeagent_project(current_user) if params[:send_to_freeagent]

#flash[:notice] = 'Case was successfully created.'
flash[:notice] = fading_flash_message("Case was successfully created.", 5)

format.html { redirect_to(@kase) }
format.xml  { render :xml => @kase, :status => :created, :location => @kase }
end
end

上面的代码没有抛出任何错误——但是电子邮件没有被发送。我想知道我是否做错了什么?

应该是这样,还是我遗漏了什么:

UserMailer.delay.deliver_makeakaseteam("email2@address.com", "Highrise", @kase) if params[:notify_team_of_creation]

谢谢,

丹尼

更新

--- 
- !ruby/object:Delayed::Backend::ActiveRecord::Job 
  attributes: 
    created_at: 2011-02-21 13:30:38
    locked_by: 
    failed_at: 
    updated_at: 2011-02-21 13:30:38
    handler: |
      --- !ruby/struct:Delayed::PerformableMethod 
      object: LOAD;UserMailer
      method: :deliver_makeakase
      args: 
      - email@email.com
      - Highrise
      - LOAD;Kase;19

    priority: "0"
    id: "1"
    run_at: 2011-02-21 13:30:38
    locked_at: 
    attempts: "0"
    last_error: 
  attributes_cache: {}

- !ruby/object:Delayed::Backend::ActiveRecord::Job 
  attributes: 
    created_at: 2011-02-21 13:30:38
    locked_by: 
    failed_at: 
    updated_at: 2011-02-21 13:30:38
    handler: |
      --- !ruby/struct:Delayed::PerformableMethod 
      object: LOAD;UserMailer
      method: :deliver_makeakaseteam
      args: 
      - email@email.com
      - Highrise
      - LOAD;Kase;19

    priority: "0"
    id: "2"
    run_at: 2011-02-21 13:30:38
    locked_at: 
    attempts: "0"
    last_error: 
  attributes_cache: {}

=> nil

【问题讨论】:

  • 他们是否进入了延迟工作表?如果是这样,它们是否被锁定并运行?他们是否在其中存储错误(DJ 将存储运行表中代码的异常)?延迟的作业工人是否正在运行?
  • 工作必须运行才能完成 Freeagent 作业,不是吗?如何查看作业表?
  • 是的,如果其他工作正在运行,则 DJ 正在运行。您可以随心所欲地检查作业表 - 它只是数据库中的一个表。你可以使用rails控制台..运行y Delayed::Job.all
  • 好的,电子邮件显示在控制台中。我会更新我的问题。

标签: ruby-on-rails email queue gem delayed-job


【解决方案1】:

来自(collectiveidea)delayed_job 文档

由于邮件程序在 Rails 3,我们必须做一些工作 让delayed_job开始工作。

没有延迟作业

Notifier.signup(@user).deliver

延迟作业

Notifier.delay.signup(@user)

删除 .deliver 方法使其成为 工作。这并不理想,但它是 我们现在能做的最好的。

希望这会有所帮助

【讨论】:

  • 遗憾的是,它是 Rails 2.3 应用程序。还是谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-26
  • 2010-10-08
  • 1970-01-01
  • 2015-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多