Тайм-аут не работает на герою для Rails приложения - PullRequest
0 голосов
/ 17 сентября 2018

Я пытался увеличить время ожидания, у меня запущено приложение, и оно развернуто на Heroku.У меня есть несколько запросов, которые занимают более 30 секунд.И эти запросы вставляются в базу данных.Из-за требований я не могу переместить эти вставки в фоновую работу.Я увеличил время ожидания до 60 секунд, а потом увеличил его до 80 секунд, и он работал нормально.Но недавно он перестал работать независимо от того, что я делаю, это не позволяет мне увеличить время ожидания.Это прекрасно работает в среде разработки, но не на производстве.И я использовал gem rack-timout

Я использовал эти опции:

Rack::Timeout.timeout = 60  # seconds
Rack::Timeout.wait_timeout = 60
Rack::Timeout.wait_overtime = 60
Rack::Timeout.service_timeout = 60
Rack::Timeout.service_past_wait = true

Изначально я использовал только опцию тайм-аута, и он использовалработать нормально.Но позже я попытался добавить дополнительную опцию, надеясь, что любой из них будет работать.

Вывод на сервер:

    2018-09-17T08:00:32.163182+00:00 heroku[router]: at=error code=H12 desc="Request timeout"
method=POST path="/organizations/53/events" host=HOST_NAME 
request_id=abbd22bf-5298-4480-m027-aa00a52a0587 fwd="103.7.79.236" dyno=web.1
connect=1ms service=30135ms status=503 bytes=0 protocol=https

Любая помощь будет принята с благодарностью.Заранее спасибо.

1 Ответ

0 голосов
/ 17 сентября 2018

H12 - это тайм-аут, предоставленный Heroku, а не вызванный вашим приложением.Heroku не дает вам возможности увеличить этот тайм-аут.

Вы все равно должны переместить это, чтобы оно было асинхронным.Одним из способов может быть запуск запроса, который создает объект «задание» со статусом.Затем все, что вам нужно сделать, выполняется в фоновом режиме.После завершения действия вы изменяете значение состояния с «ожидающий» на «успешный».

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

...