#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 и сервер. Мне ничего не помогает.