delayed_job - Выполняет не актуальный код?

Я использую delayed_job (пробовал как tobi, так и Collective_idea) на общем хостинге site5.com с пассажиром в качестве рельсов. Мне удалось сделать работу. Однако похоже, что плагин игнорирует любые изменения в исходном коде класса задания после первого запуска. Я перезапускал сервер при каждом изменении (touch tmp/restart.txt), но он все равно игнорирует его.

Пример:

файл: lib/xx_job.rb

class XxJob
  def perform
    Rails.logger.info "XX START"

    TempTest.delete_all

    i = 0
    10.times {
      i+=1
      TempTest.create(:name => "XXX")
      sleep(1)
    }

    Rails.logger.info "XX END"
  end
end

В простом контроллере я вызываю:

Delayed::Job.enqueue(XxJob.new)

Выводы, которые я сделал:

  1. Если поменять xx_job.rb на xx_job1.rb - ошибка на контроллере
  2. Если я изменю класс XxJob на класс XxJob1 - ошибка на контроллере
  3. Если я удалю все содержимое метода Perform - будет выполнен старый код старый код
  4. Новый файл .rb с классом и выполнением, поставьте этот класс в очередь - отлично работает
  5. Если я что-то изменил в этом новом файле, снова запустил и запустил задание - будет выполнен старый код.

Между каждым изменением я перезагружал сервер. Вроде Пассажир или еще что-то спасает кеш классов.

Как мне удалить этот кеш? Где-то на сервере хранится? (Надеюсь, у меня есть доступ к нему с виртуального хостинга)

Спасибо!


person elado    schedule 28.12.2009    source источник
comment
Вы видели этот ответ? stackoverflow.com/questions/1609586/   -  person Jeff Paquette    schedule 28.12.2009


Ответы (2)


Если вы запускаете демонизированные рабочие задания с отложенным заданием, вам необходимо перезапустить их, чтобы перезагрузить код. Также имейте в виду, что каждый рабочий загружает свой собственный экземпляр рельсов.

person m33lky    schedule 26.06.2011

В конце концов я понял это - несколько воркеров работали в фоновом режиме, каждый из них поймал задание и имел свой собственный кеш. Я не знал, как их убить, поэтому на несколько секунд изменил имя стола. Это их убило :)

Затем я использовал https://github.com/tobi/delayed_job/wiki/Running-Delayed::Worker-as-a-daemon как рабочий запуск, и он отлично работает.

person elado    schedule 29.12.2009