Процесс Heroku завершается со статусом 0, но его dyno все еще "вылетает"
У меня есть сценарий слома, написанный на рубине, работающий на героку внутри рабочего стола. Несмотря на то, что сценарий работает без сбоев и выходит со статусом 0, heroku все еще говорит мне, что динамометрический сбой:
2016-12-13T00:59:10.695566+00:00 heroku[spider.1]: State changed from up to crashed
2016-12-13T00:59:10.683166+00:00 heroku[spider.1]: Process exited with status 0
Что я могу сделать, чтобы заставить динамо правильно остановиться, когда сценарий завершится?
Благодарю.
4 ответа
Динозавры, которые работают как часть вашей динамо формации, должны работать непрерывно. Архитектура, которая должна работать для вас:
- Добавьте скребок в виде команды (например, скрипт с установленным исполняемым битом), через который вы сможете запускать
heroku run
например,heroku run -r production scrape
, - Добавьте скрипт, который запускает команду из пункта 1, например, вы можете использовать API платформы или
heroku run -r production scrape
, - Вызовите сценарий в пункте 2 из планировщика Heroku.
Это должно быть хорошей отправной точкой. Есть несколько угловых случаев, которые вы должны обработать, например, гарантируя, что одновременно может выполняться только одна очистка (если это, конечно, ваше требование).
Звучит как работа для Heroku Scheduler и одноразовых динамометров:
Планировщик Heroku выполняет запланированные задания через одноразовые динамометры
Есть 2 типа: одноразовые и «формирование дино» https://devcenter.heroku.com/articles/one-off-dynos:
Набор динамометров, объявленный в вашем Procfile и управляемый менеджером динамометров через heroku ps:scale, известен как формация динамометров. Эти динамики выполняют обычную работу приложения (например, обрабатывают веб-запросы и фоновые задания) во время его работы. Если вы хотите выполнять разовые административные или обслуживающие задачи для приложения или периодически выполнять какую-либо задачу с помощью планировщика Heroku, вы можете запустить одноразовый динамометр.
Есть четыре различия между одноразовыми динамометрами (запуск с помощью heroku run) и формированием динамометров (запуск с помощью heroku ps:scale), одно из них — политика перезапуска:
Одноразовые динамометры никогда не перезапускаются автоматически, независимо от того, завершается ли процесс сам по себе или вы отключаетесь вручную.
Похоже, это именно то, что вам нужно.
Судя по документации героку, ты не можешь. Если динамо останавливается, оно считается раздавленным.
"Отказ" динамо представляет собой любое событие, происходящее с процессом, запущенным в динамо, которое вызывает остановку динамометра. Это включает в себя процесс, завершающийся с кодом выхода 0 (или любым другим кодом выхода)
Я также считаю, что вы можете остановить динамо через API Heroku из своего кода. См. https://devcenter.heroku.com/articles/platform-api-reference для получения дополнительной информации.