Вопрос

Я использую Delayed_job (пробовал как Tobi, так и Collective_idea) на общем хостинге site5.com со средой Passenger as Rails.Мне удалось выполнить работу.Однако кажется, что плагин игнорирует любые изменения в исходном коде класса задания после первого запуска.Я перезапускал сервер при каждом изменении (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. Если я удалю все содержимое метода выполнения - будет выполнен старый код.
  4. Новый файл .rb с классом и выполнением, поставьте этот класс в очередь - работает отлично.
  5. Если я снова изменю что-то в задании выполнения и запуска этого нового файла - старый код будет выполнен.

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

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

Спасибо!

Это было полезно?

Решение 2

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

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top