Ответ 1
или используйте собственный режим обслуживания Heroku именно для этого сценария - http://devcenter.heroku.com/articles/maintenance-mode
Есть ли чистый, элегантный способ реализации страницы обслуживания в приложении Heroku? Так что, если что-то сломается, вы можете очень легко включить переключатель, и страница обслуживания будет повышаться для всех запросов? Предпочтительно способ, который не требует нажатия?
Идеи? Благодаря
или используйте собственный режим обслуживания Heroku именно для этого сценария - http://devcenter.heroku.com/articles/maintenance-mode
ПРИМЕЧАНИЕ. В этом ответе рассматриваются настройки nginx или Rack, как это было написано до редактирования исходного вопроса, и ясно дал понять, что он ищет ответ, характерный для Heroku. Принятый ответ лучше всего подходит для приложений Heroku.
Когда вы говорите "в своем приложении", вы действительно имеете в виду в вашем приложении?
Как правило, решение заключается в том, чтобы удалить файл поддержки в свой веб-корень. Если файл найден, он немедленно отправляется с 503 Service Not Available
. Запрос никогда не делает это в вашем приложении, которое, по-видимому, "вниз для обслуживания".
В nginx что-то вроде этого:
location / {
if (-f $document_root/maintenance.html) {
return 503;
}
# continued server directives
}
error_page 503 @maintenance;
location @maintenance {
rewrite ^(.*)$ /maintenance.html break;
}
На самом деле это не требовало бы толчка как такового, но, возможно, простой задачи рейка или что-то добавить/удалить этот файл поддержки из вашего приложения. Возможно, вы также могли бы заменить любое имя файла в тесте -f
и просто touch
пустым произвольным maintenance.whatever
файлом в вашем корневом каталоге веб-сайтов, который затем будет направлять nginx для обслуживания mainenance.html
.
Если вы не хотите (или не можете) обходиться с конфигурацией сервера, это очень простое промежуточное ПО Rack делает по существу одно и то же: https://github.com/ddollar/rack-maintenance
Чтобы добавить ответ Эмануэля:
Trackman помогает с вашими страницами обслуживания от dev до prod.
Вы можете
Он будет разворачивать все на S3, когда вы нажимаете на Heroku, и вам даже не нужно настраивать учетную запись на S3.
Вам также нужно запустить
rake trackman:setup
Итак, Heroku указывает на ваши S3-страницы в режиме обслуживания.
Это, вероятно, легко выполнить, добавив before_filter в начале цепочки фильтров, которая проверяет состояние режима обслуживания и перенаправляет на странице обслуживания, когда это необходимо.
Ответы, приведенные выше, подходят для базового сценария.
Для умной части вашего вопроса вот аддон, который доставит вас туда: