Автоматизировать задачу рейка для запуска при загрузке на heroku?

#ruby-on-rails #heroku #rake #ruby-on-rails-6 #procfile

#ruby-on-rails #heroku #рейк #ruby-on-rails-6 #procfile

Вопрос:

Предположим, есть задача

 rake startupscript
  

это должно выполняться при загрузке приложения, как мы можем автоматизировать это на heroku?

Я знаю, что есть планировщик heroku, но он будет запускать задачу каждые 10 минут, а не только один раз при загрузке. Я также знаю о Procfile и считаю, что это может быть решением, хотя я еще не знаю, как реализовать (и, вероятно, что более важно, я не хочу рисковать сломать что-либо еще, что можно настроить с помощью Procfile, например, веб-сервер и т. Д.). Многие документы Procfile сосредоточены на его использовании для изменения веб-серверов, а не задач rake на уровне приложений.

Как можно заставить задачу rake запускаться при загрузке?

Ответ №1:

Вы можете добавить что-то подобное в Procfile перед запуском служб приложений

 # Run pre-release-tasks here
release: bundle exec rails db:migrate
# Then run your application
web: bundle exec puma -t 5:5 -p ${PORT:-3000} -e ${RACK_ENV:-development}
  

Все, помеченное как release , будет выполняться до запуска сценария запуска

https://devcenter.heroku.com/articles/release-phase

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

1. Большое спасибо, это работает. web: bundle exec puma -t 5:5 -p ${PORT:-3000} -e ${RACK_ENV:-development} я немного нервничаю, я не хочу случайно перенастроить вещи. Вы знаете, установлены ли они по умолчанию? Кроме того, возможно ли иметь несколько строк для «выпуска»?

2. О, это был просто пример. Вам не нужно использовать web line

3. Вы случайно не знаете, запускается ли Procfile при редактировании приложения restart или сразу после его самой первой сборки?

4. @stevec это также упоминается в ссылке, которой я поделился. devcenter.heroku.com/articles/… FWIU, он не будет запускаться при перезапуске веб-сервера, только когда что-то изменится

5. Бесконечная задача рейка? Похоже, вам нужно фоновое задание, задание cron или вторая служба. Вам нужно будет предоставить более подробную информацию. Вы могли бы отредактировать этот вопрос, чтобы включить это тоже