Отправка электронной почты через resque: объект рассматривается как хеш - PullRequest
3 голосов
/ 08 февраля 2012

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

Кажется, что объект 'Admin' рассматривается как хеш, а не рассматривается как объект admin. Есть идеи?

account.rb

class Account < ActiveRecord::Base
    after_commit :send_welcome_email

    def send_welcome_email
      SubscriptionNotifier.welcome(self).deliver
    end

end

subscription_notifier.rb

class SubscriptionNotifier < ActionMailer::Base

  def welcome(account)
    @subscriber = account
    mail(:to => account.admin.email, :subject => "Welcome!")
  end

end

Ошибка восстановления

SubscriptionNotifier Arguments

    "welcome"
    {"account"=>{"address_line1"=>nil, "address_line2"=>nil, "city"=>nil, "created_at"=>"2012-02-08T10:56:22-08:00", "currency"=>"United States Dollar (USD)", "deleted_at"=>nil, "description"=>nil, "email"=>"test2@test.com", "full_domain"=>"www.test.net", "id"=>3, "initial_plan"=>nil, "latitude"=>nil, "longitude"=>nil, "name"=>"macs", "phone"=>nil, "setup_steps_complete"=>0, "state"=>nil, "time_zone"=>"Pacific Time (US & Canada)", "updated_at"=>"2012-02-08T10:56:22-08:00", "website"=>nil, "zip"=>nil}}

Exception
    NoMethodError
Error
    undefined method `admin' for #<Hash:0x0000000585aa70>

Ответы [ 3 ]

1 голос
/ 05 октября 2012

Я думаю, вы должны просто ввести идентификатор учетной записи в очередь и попросить работника получить объект Account, когда он выполняет метод execute.Это должно уменьшить твои проблемы с хэшем.

0 голосов
/ 02 августа 2012

Попробуйте это:

in account.rb

   def send_welcome_email
      SubscriptionNotifier.welcome(self.admin.email).deliver
    end

в subscription_notifier.rb

 def welcome(account_admin_email)
    @subscriber = account 
    mail(:to => account_admin_email, :subject => "Welcome!")
  end

У меня была та же ошибка, по-видимому, вы передаете account как хеш, и у него нет метода admin электронной почты. Поэтому просто получите письмо в методе send_welcome_email и передайте его в качестве параметра, вместо того, чтобы передавать хэш и пытаться получить доступ к электронному письму в методе welcome.

ПРИМЕЧАНИЕ: для @subscriber вам нужно будет передать параметры, так же, как и электронное письмо, которое вы используете в шаблоне электронной почты, например, self.admin.name в модели и @name = account_admin_name в методе приветствия

Надеюсь, это поможет.

0 голосов
/ 29 марта 2012

Вам нужно будет загрузить среду, запустив 'rake environment resque: work QUEUE =' * 'RAILS_ENV = staging'

, если только у вас нет

задачи "resque: setup"=>: среда

определена в файле resque.rake.

...