Есть ли способ, чтобы URL-адрес ошибки / обслуживания Heroku обслуживался напрямую без iframe

Heroku позволяет вам включить «режим обслуживания» для ваших приложений, а также позволяет указать настраиваемый URL-адрес, который будет обслуживаться в течение этого периода. Я просто попробовал это и обнаружил, что Heroku обслуживает настраиваемый URL-адрес в iframe. Это было не совсем то, чего я ожидал.

Мы используем Heroku для размещения службы API и планировали, что пользовательские страницы ошибок / обслуживания будут обслуживать данные json. Мы надеемся, что существует способ напрямую обслуживать URL-адрес для обслуживания.

После поиска по SO, Quora и в других "интернет-сетях" я не видел сообщений, в которых задавался бы этот вопрос, поэтому здесь я пишу на SO.

Ниже приведены сообщения, которые связаны с моим вопросом, но не касаются его напрямую.

Старые сообщения до какой-либо настройки: https://groups.google.com/forum/?fromgroups=#!topic/heroku/EJRtW1XrlpU

Опубликуйте сообщение с запросом пользовательского javascript в html, отображающем iframe: https://groups.google.com/forum/?fromgroups=#!topic/heroku/Db0JEWmuz_w


person jumand    schedule 11.02.2013    source источник
comment
jumand, вам удалось найти способ добиться этого? У меня сейчас аналогичная проблема.   -  person sheldonbaker    schedule 27.08.2014
comment
Неа. : - / Но с тех пор мы этим не занимались. Тогда мы поговорили с менеджером по работе с клиентами, и похоже, что это не входило в план.   -  person jumand    schedule 04.10.2014
comment
Вот обходной путь: stackoverflow.com/a/42017093/242933.   -  person ma11hew28    schedule 03.02.2017


Ответы (2)


Невозможно настроить страницы с ошибками, кроме указанных здесь, которые используют iFrame: https://devcenter.heroku.com/articles/error-pages#customize-pages

person catsby    schedule 11.02.2013

В качестве обходного пути вы можете запрограммировать свое приложение Heroku так, чтобы для каждого полученного запроса оно сначала (прежде чем делать что-либо еще) проверяло простое существование определенной переменной среды, например, с именем MAINTENANCE. Если установлено, вы немедленно возвращаете свой собственный ответ JSON.

Например, добавьте следующий блок кода в начало call метода Rack app. (Для приложения Sinatra вы можете добавить его в начале перед фильтром. Для Ruby on Rails app, вы можете реализовать это как промежуточное ПО для стойки.)

if ENV['MAINTENANCE']
  status = '503'
  headers = {'Content-Type' => 'application/json'}
  body = ['{"message":"The server is undergoing maintenance. Please try again later."}']
  return [status, headers, body]
end

Затем, чтобы включить "режим обслуживания", задайте для переменной среды вашего приложения MAINTENANCE любое значение. ваше сердце желает.

heroku config:set MAINTENANCE=1

Чтобы отключить «режим обслуживания», просто отключите переменную среды MAINTENANCE вашего приложения.

heroku config:unset MAINTENANCE

Вуаля! Импровизированный режим обслуживания для приложения JSON REST API.

person ma11hew28    schedule 03.02.2017
comment
Просто обратите внимание, что это не полная замена собственного режима обслуживания Heroku, поскольку он не работает во время перезапуска / масштабирования приложения. - person vitalets; 07.01.2020