Задержка отправки электронной почты в Rails? - PullRequest
0 голосов
/ 21 февраля 2011

Я использую delayed_job, чтобы отложить отправку информации из моего приложения в FreeagentCentral (пакет бухгалтерских услуг). В то же время он также отправляет два электронных письма, используя гем PostmarkApp.

# 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]

Спасибо

Danny

UPDATE

--- 
- !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

1 Ответ

1 голос
/ 21 февраля 2011

из (colleideidea) delayed_job docs

Из-за того, как почтовые программы реализованы в Rails 3, нам пришлось немного поработать, чтобы заставить delayed_job работать.

Notifier.signup(@user).deliver

с delayed_job

Notifier.delay.signup(@user)

Удалите метод .deliver, чтобы он заработал.Это не идеально, но это лучшее, что мы можем сделать на данный момент.

надеюсь, что это может помочь

...