Является ли delayed_job асинхронным?

#ruby-on-rails #asynchronous #delayed-job

#ruby-on-rails #асинхронный #отложенное задание

Вопрос:

Я пытаюсь выполнить длинную задачу асинхронно. Но задача выполняется синхронно. Может ли отложенное задание 3.0.5 выполняться асинхронно?

Я бы попробовал: модель:

 MyModel < ActiveRecord::Base

  def do_something
    sleep 10
  end
  #handle_asynchronously :do_something

end
  

и я вызываю это из контроллера:

 def do_it
  new_do = MyModel.new id: 1
  new_do.delay.do_something
  render json: {"status":"200"}
end
  

после получения запроса я все еще жду 10 секунд до получения ответа.
Итак, где я был неправ и что я могу сделать, чтобы запустить его и получить ответ от контроллера до 10 секунд?

Комментарии:

1. возможно, у вас ошибка в вашем действии do it с переменной new_so .

2. Вы не должны использовать delay и handle_asynchronously вместе, одно исключает другое

3. Я прокомментирую это позже комментарием @rdlh

Ответ №1:

Вы НЕ должны использовать handle_asynchronously с delay . Используйте только один из них, а не оба одновременно.

Если ваш метод всегда должен выполняться в фоновом режиме, предпочтительнее #handle_asynchronously .

Документация здесь

Комментарии:

1. Да, я пытаюсь без ‘handle_asynchronously’. Больше ничего. Приложение и рабочие перезапущены, но задание все равно выполняется синхронно. Также я бы попробовал с ‘handle_asynchronously’ и без ‘.delay’. Синхронизируйте в любом случае ВЕСЬ ДЕНЬ! ^)

2. Я использую вызов скрипта RAILS_ENV= сценарий разработки / перезапуск delayed_job и ручное удаление записей delayed_job из базы данных. Итак, я перезапустил puma, nginx и сервер. Мне ничего не помогает.