有没有办法在没有iframe的情况下直接提供Heroku错误/维护网址

时间:2013-02-11 05:57:21

标签: heroku custom-error-pages maintenance-mode

Heroku允许您为应用程序启用“维护模式”,还允许您指定在此期间要提供的自定义URL。我刚尝试了这一点,发现Heroku在iframe中提供自定义网址。这不是我所期待的。

我们使用Heroku来托管API服务,并计划让自定义错误/维护页面提供json数据。我们希望有一种方法可以直接提供维护网址。

在搜索了SO,Quora和一般的“互联网”后,我没有看到任何帖子提出这个问题,所以我在这里发帖。

以下是与我的问题相关的帖子,但不直接解决。

有任何自定义之前的旧帖子: https://groups.google.com/forum/?fromgroups=#!topic/heroku/EJRtW1XrlpU

在html中要求自定义javascript呈现iframe: https://groups.google.com/forum/?fromgroups=#!topic/heroku/Db0JEWmuz_w

2 个答案:

答案 0 :(得分:2)

作为一种解决方法,您可以对Heroku应用程序进行编程,以便对于它收到的每个请求,首先(在执行任何其他操作之前)检查是否存在特定的环境变量,例如,称为MAINTENANCE。如果设置,则立即返回自定义JSON响应。

例如,在Rack app call方法的开头添加以下代码块。 (对于Sinatra app,您可以在before filter的开头添加。对于Ruby on Rails app,您可以将其实现为Rack middleware。)

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 mode,"将您应用的MAINTENANCE环境变量设置为您心中所需的任何值。

heroku config:set MAINTENANCE=1

关闭"维护模式,"只需取消设置应用的MAINTENANCE环境变量。

heroku config:unset MAINTENANCE

瞧! JSON REST API应用程序的临时维护模式。

答案 1 :(得分:1)

无法自定义此处概述的错误页面,其中使用了iFrame:https://devcenter.heroku.com/articles/error-pages#customize-pages