Этот терминал перезапускает мой Heroku приложение:Перезапуск мой Heroku приложение автоматически
heroku restart
Есть ли способ, чтобы запустить скрипт, который будет запускать эту команду и перезапустить мое приложение каждый час?
Этот терминал перезапускает мой Heroku приложение:Перезапуск мой Heroku приложение автоматически
heroku restart
Есть ли способ, чтобы запустить скрипт, который будет запускать эту команду и перезапустить мое приложение каждый час?
Мне на самом деле просто пришлось решить эту проблему для своих приложений и написал сообщение об этом с более подробной информацией. В принципе, вам нужен герой героя-апи сейчас, так как герой герою заменяется CLI. Тогда вам понадобится задача рейка, пара конфигурационных переменных и плагин планировщика героя (бесплатно, за исключением минимального времени диноза).
Задача рейка выглядит следующим образом:
namespace :heroku do
desc 'restarts all the heroku dynos so we can control when they restart'
task :restart do
Heroku::API.
new(username: ENV['HEROKU_USERNAME'], password: ENV['HEROKU_PASSWORD']).
post_ps_restart(ENV['HEROKU_APP_NAME'])
end
end
Вы также можете настроить его, чтобы использовать API маркер вместо того, чтобы ваше имя пользователя и пароль в конфигурации.Это имеет значение только в том случае, если вы не хотите, чтобы ваши соавторы/сотрудники знали ваш пароль или пароль для вашего основного аккаунта на Heroku.
heroku config:set HEROKU_USERNAME=[username] HEROKU_PASSWORD=[password] HEROKU_APP_NAME=[app_name] -a [app_name]
Теперь, идти вперед и развертывание и тестирование:
git push [heroku_remote_name] [feature_branch]:master
heroku run rake heroku:restart -a [app_name]
Наконец, мы должны настроить задачу запуска этого по расписанию. Я решил пойти с свободным Heroku хроны дополнения:
heroku addons:add scheduler:standard -a [app_name]
heroku addons:open scheduler -a [app_name]
Это откроет планировщик пользовательский интерфейс в вашем браузере, и вы можете создать запланированный работник для выполнения этой задачи грабель каждый раз, когда вы хотите. Нам это нужно только один раз в день, и мы решили запустить его до нашей первой запланированной работы дня.
Мой оригинальный пост с ебаный до CSS (см Update2 ниже):
UPDATE
Я изменил имя задачи из "Implode" до "перезагрузки", чтобы быть путь более ясный относительно того, что происходит. Implode - забавное имя, но в значительной степени бесполезно в противном случае.
UPDATE2
Видимо моя компания удалили запись в блоге. Я добавляю больше кода здесь, и я обновил ссылку, но CSS выглядит как собака. Мои извинения.
Вот готовая к развертыванию грабли на основе вашего решения: https://github.com/demental/herokustarter. Причина, по которой я нуждался в этом, заключалась в том, что мне пришлось очистить некоторые мемуары вне приложения (I18n ActiveRecord Backend). Я не вижу другого пути. – demental
Сайт не найден Ошибка при открытии ссылки. Можете ли вы обновить ссылку – coderVishal
@coderVishal Спасибо, я обновил сообщение сейчас – WattsInABox
Вы можете создать хрон Heroku, который использует API Heroku на приложение, чтобы перезагрузить себя ...
Один вопрос, хотя - почему?
У меня есть утечка памяти в моем приложении, и перезапуск приложения сбрасывает использование памяти. Таким образом, это может быть временное исправление, пока мы не исправим проблему с памятью. –
рядом с дополнением cron вы можете сделать cron из локальной системы ur или любого другого сервера (который живет в Интернете) для запуска «перезагрузки героя» почасово. – Gull
Основная причина, по которой я думаю, что это что-то вроде этого, - геройку перезапускает каждый дино через 24 часа после его воспитания. Это будет в значительной степени случайным временем, если вы ничего не сделаете. Если вместо этого вы перезагружаете приложение в свое время в течение некоторого времени с низким трафиком, вы можете свести к минимуму влияние на ваш бизнес. OP говорит «каждый час», но эти решения могут быть адаптированы для любого периода времени перезапуска. – WattsInABox
Сценарий не нужен, просто «сбой» вашего приложения, и Heroku перезапустит его.
Просто не делайте этого чаще, чем раз в десять минут, или Heroku будет подвергать вас 10-минутному таймауту.
В node.js вы делаете это с помощью process.exit(0)
.
От Криса в Heroku Поддержка:
разбился дино будет перезагружен немедленно. Если дино перемещается из разбитого состояния в состояние «вверх» (это означает, что дина привязана к $ PORT), тогда он подчиняется нормальной работе. Если он снова сработает во время загрузки или «стартовой» последовательности, тогда он не будет снова перезапущен до периода времени. Период TIMEOUT равен в настоящее время 10 минут, но это может быть изменено. Это предотвращает динозавров, которые постоянно сбиваются с посторонней нагрузки на платформу .
Однако, как ни звучит, на практике это не работает. Вы попали тайм-аут каждый время вам выход, потому что менеджер дино ожидает, ваше приложение будет вверх:
Для вашего управления рабочим процессом вы выходе из процесса чисто но платформа ожидает, что дино быть вверх. Похоже, вы в итоге , по сути, разбиваете дино.
Так что, если вам нужно периодически перезапускать - и этот период может быть установлен на> 10 минут - это простой и простой способ управления очисткой памяти. Если вам необходимо перезагружаться динамически (например, при простоя), или часто вам нужно будет изучить другие параметры.
Вы можете получить доступ к имени dyno (например, «worker.3», «web.1») через переменную окружения «PS» и запрограммировать команду перезапуска API героя.
Это необходимо для некоторых, в нашем случае, наше приложение занимает 80 секунд для загрузки на героку, а когда они выполняют свои автоматизированные ежедневные циклы dyno, это вызывает ошибки времени для пользователей. Если мы перезагружаем герою, он использует preboot, а dynos - до того, как они получат трафик. –
# Setup
heroku plugins:install https://github.com/heroku/heroku-oauth
heroku authorizations:create -s write
heroku config:add RESTART_API_KEY=<API KEY>
heroku config:add APP_NAME=<App Name>
heroku addons:add scheduler:standard -a <App Name>
heroku addons:open scheduler -a <App Name>
add `rake restart`
# Gemfile
gem 'platform-api', require: false
# Rakefile
task :restart do
require 'platform-api'
app_name = ENV.fetch('APP_NAME')
key = ENV.fetch('RESTART_API_KEY')
connection = PlatformAPI.connect_oauth(key)
connection.dyno.list(app_name).map do |info|
if info['type'] == 'web' && info['state'] == 'up'
puts "Restarting #{info.inspect}"
connection.dyno.restart(app_name, info['name'])
else
puts "Skipping #{info.inspect}"
end
end
end
Было ли это когда-либо проверено и подтверждено для работы? –
все еще использует его сегодня, поэтому да :) – grosser
Я могу подтвердить, что он работает по назначению. <3 –
Насколько я могу сказать, просто запустив heroku ps:restart --app APPNAME
в Heroku планировщик дополнение работает отлично. Мне непонятно, почему необходимы дополнительные шаги в других ответах.
Я просто попробовал это, и не было перезапуска dyno. Журнал Heroku для планировщика предполагает, что команда не удалась. На динамиках нет «героику». Вы можете попробовать это, выполнив 'heroku run bash' в терминале, а затем попытавшись запустить команды heroku. Может быть, у вас есть специальный сборщик или есть какой-то специальный стек? Я на кедре-14. –
Извините за поздний ответ. У меня есть несколько приложений на Heroku (все на кедре-14), некоторые из них находятся в Ruby, а некоторые - в Go. Я только что протестировал 'heroku ps: restart --app APPNAME' на моем Ruby dyno с Heroku Scheduler, и он сработал. Я также попробовал «heroku run bash» на этом dyno и смог выполнить команды «heroku» внутри него. Я не использую какие-либо специальные buildpacks, а только конфигурацию по умолчанию для Rails-приложений. Однако я попытался сделать то же самое в приложении Go, и команда 'heroku' была недоступна. Поэтому он должен быть включен в Ruby buildpack (и, возможно, другие), но не все из них. –
Ага, это странно. Я попробовал его в приложении Rails (поэтому у него был Ruby buildpack - я думаю, что это более конкретно Ruby 2.2.5), и там мне пришлось специально добавить героин-buildpack-toolbelt. –
Мы решили это, используя buildpack, чтобы получить команду heroku
, доступную самому dyno, затем используя планировщик Heroku.
Мы добавили https://github.com/gregburek/heroku-buildpack-toolbelt buildpack за его инструкции:
heroku buildpacks:add https://github.com/gregburek/heroku-buildpack-toolbelt.git
heroku config:add HEROKU_TOOLBELT_API_EMAIL=`heroku whoami`
heroku config:add HEROKU_TOOLBELT_API_PASSWORD=`heroku auth:token`
Затем убедились, что приложение слизняк был восстановлен в соответствии с инструкциями:
git push heroku master
В Heroku планировщиком, мы добавили это как почасовую работу :
vendor/heroku-toolbelt/bin/heroku ps:restart -a $HEROKU_APP_NAME
Вы можете определить, работает ли он, глядя на r Выход планировщика в журналах Heroku и, конечно, график памяти приложения на панели инструментов Heroku (если вы перезагружаетесь, чтобы обойти утечку памяти).
С тех пор мы перешли на этот buildpack, который не устарел: https://github.com/heroku/heroku-buildpack-cli Его конфигурация немного отличается. –
Обратите внимание, что https://github.com/heroku/heroku-buildpack-cli использует другой путь для своего бинарного файла 'heroku'. –
Я решил это с помощью очень простого скрипта команды curl в репо, который запускается с использованием free Heroku scheduler.
#!/bin/sh curl -X DELETE "https://api.heroku.com/apps/${HEROKU_APP_NAME}/dynos" \ --user "${HEROKU_CLI_USER}:${HEROKU_CLI_TOKEN}" \ -H "Content-Type: application/json" \ -H "Accept: application/vnd.heroku+json; version=3"
См https://gist.github.com/mattheworiordan/f052b7693aacd025f025537418fa5708.
У меня есть потребность в том же. Моя причина в том, что я обновляю переводы I18n на cron и должен перезапустить приложение, чтобы очистить кеш I18n. –
@Однако вы должны выбрать ответ, пожалуйста, чтобы люди не видели это в своих кормах «без ответа». Благодаря! – WattsInABox