Задержка не выполнена, несмотря на немедленное исчезновение из таблицы delayed_jobs - PullRequest
1 голос
/ 21 октября 2011

Я реализовал отложенную работу в своем приложении Rails, следуя инструкциям .

  1. Я запускаю приложение Rails
  2. Я нажимаю на ссылку, которая запускает отложенное задание
  3. Задание отображается в таблице delayed_jobs базы данных
  4. Я бегу rake jobs:work
  5. Задание исчезает из таблицы, поэтому, я думаю, задание выполнено
  6. НО ПРОБЛЕМА: /tmp/job.log не написано (что должна была сделать работа)

Работа:

class CsvImportJob
  def perform
    File.open('/tmp/job.log', 'w') {|f| f.write("Hello") }
  end
end

Звонок:

job = CsvImportJob.new
job.delay.perform

Ничего в логах.
Терминал rake jobs:work ничего не говорит после своего начального сообщения:

[Worker(host:nico pid:25453)] Starting job worker

Ничего не происходит, когда я запускаю задание во время работы rake jobs:work.

Напротив, когда выполняется строка "hello".delay.length, delayed_jobs обрабатывает ее и появляется сообщение String#length completed after 0.0556 - 1 jobs processed at 3.6912 j/s, 0 failed.

Ответы [ 2 ]

2 голосов
/ 05 июля 2012

Я немного опаздываю на вечеринку, но тоже смотрю на:

https://github.com/collectiveidea/delayed_job/wiki/Common-problems#wiki-jobs_are_silently_removed_from_the_database

Ваш случай не похож на ошибку десериализации YAML, но (как рекомендует WIKI) вы можете установить Delayed::Worker.destroy_failed_jobs = false, чтобы невыполненное задание оставалось в таблице, и вы могли изучить причину ошибки.

обновление

Если подумать: вы уверены, что класс CsvImportJob известен рабочей задаче? То есть, определен ли csv_import_job.rb в одной из «хорошо известных» директорий для класса Rails? Если нет, то рабочая задача не сможет десериализовать ее, что приведет именно к тому поведению, которое вы видите.

Если по какой-то причине cav_import_job.rb не находится в хорошо известном каталоге, вы всегда можете require это из файла инициализации - это должно решить проблему.

2 голосов
/ 27 октября 2011

См. https://github.com/collectiveidea/delayed_job/wiki/Common-problems#wiki-undefined_method_xxx_for_class в документации.

Даже автор delayed_job не знает причину.Это как-то зависит от веб-сервера, на котором вы работаете.Попробуйте рекомендацию вики.

См. Также delayed_job: NoMethodError

...