Задержка производства пассажирского производства неопределенная ошибка метода - PullRequest
2 голосов
/ 05 октября 2011

Я использую отложенную работу версии 2.1.4 с action mailer 3.0.8 для отправки моих писем в фоновом режиме.

UserMailer.delay.newsletter(email)

Это прекрасно работает со мной в разработке и на рабочей Rails консоль .

Но когда он вызывается с моего живого рабочего пассажирского сервера , он создает DJ, но когда этот DJ работает, он выдает

{undefined method `newsletter' for #<Class:0xc08afa0>

Я думаю, что проблема

Любая помощь?

Ответы [ 2 ]

1 голос
/ 31 октября 2011

Проблема с рельсами / пассажиром в производственном режиме с методами класса

Итак, я обошёл решение ... Я попытаюсь вызвать экземпляр метод и избегайте вызова class метод.

Давайте посмотрим пример;при условии, что мне нужно вызвать следующий метод в фоновом режиме ..

UserMailer.deliver_newsletter(email)

Затем я создал новый класс DelayClassMethod

class DelayClassMethod
  def initialize(receiver_name, method_name, options={})
    @receiver_name = receiver_name
    @method_name = method_name
    @parameters = options[:params] || []
  end

  def perform
    eval(@receiver_name).send(@method_name, *@parameters)
  end
end 

и теперь могу запускать метод в фоновом режиме с помощью

DelayClassMethod.new("UserMailer", "deliver_newsletter", :params=>[email]).delay

Итак, я запускаю метод instance теперь в фоновом режиме, который будет запускать метод class .

Другой пример ..

Предположим, я хочу запустить

Product.list_all_by_user_and_category(user, category).delay

Тогда его можно запустить с помощью

DelayClassMethod.new("Product", "list_all_by_user_and_category", :params => [user, category]).delay
0 голосов
/ 05 октября 2011

Я догадываюсь, что у вас есть несколько версий delayed_job в производстве. Вы используете упаковщик для запуска процесса отложенной работы?

Я бы порекомендовал при установке bundle в рабочей среде , я бы использовал флаг --binstubs для создания оболочки вокруг delayed_job и использовал этот исполняемый файл для запуска заданий.

...