Я недавно добавил delayed_job в свое приложение Rails 3.1.3.В разработке все нормально.Я даже поставил свой DJ-релиз на тот же VPS, что и мое производственное приложение, используя тот же сервер производственных приложений (Thin), и все было хорошо.Однако, как только я перешел на работу, весь ад развалился: ни одно из заданий не было правильно введено в таблицу заданий, и я начал видеть следующее в журналах для всех обработанных заданий:
2012-02-18T14:41:51-0600: [Worker(delayed_job host:hope pid:12965)]
NilClass# completed after 0.0151
2012-02-18T14:41:51-0600: [Worker(delayed_job host:hope pid:12965)] 1
jobs processed at 15.9666 j/s, 0 failed ...
NilClass инет имени метода?Конечно, не правильно.Поэтому я посмотрел на сериализованный обработчик задания в БД и увидел:
"--- !ruby/object:Delayed::PerformableMethod\nattributes:\n id: 13\n
event_id: 26\n name: memememe\n api_key: !!null \n"
Нет указания на имя класса или метода.И когда я загружаю YAML в объект и вызываю #object в результирующем PerformableMethod, я получаю ноль.Затем я запустил консоль в сломанном производственном приложении и отложил ту же работу.На этот раз обработчик выглядел так:
"--- !ruby/object:Delayed::PerformableMethod\nobject: !ruby/
ActiveRecord:Domain\n attributes:\n id: 13\n event_id: 26\n
name: memememe\n api_key: !!null \nmethod_name: :create_a\nargs: []
\n"
И, конечно же, эта работа работает нормально.Озадаченный, я вспомнил, что читал что-то о ди-джеях, которые не играют с Thin.Итак, я попробовал Unicorn и мне было грустно видеть тот же результат.Несколько часов спустя, и я думаю, что это как-то связано с тем, как сервер приложений загружает библиотеки YAML Psych, Syck и DJ с ними.Однако я не могу точно определить, что не так.
Обратите внимание, что у меня запущено официальное delayed_job 3.0.1, но я попытался перейти на основную ветку и даже попытался перейти на 2.1.4.Вот некоторые заметные различия между моей сценической и производственной установками:
- На этапе я запускаю 1 тонкий сервер на TCP-порту - нет веб-прокси впереди
- На производстве я запускаю 2+ Тонкие серверы и прокси к ним с Nginx.Они общаются через сокет UNIX
- Когда я попробовал Unicorn, это был 1 сервер приложений, к которому Nginx проксировал через сокет UNIX
Может ли веб-прокси / Nginx иметь с этим какое-то отношение??Пожалуйста, любая оценка очень ценится.Я потратил много времени на интеграцию delayed_job и не хотел бы откладывать работу или, что еще хуже, бросать ее.Спасибо за чтение.