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

Posted

技术标签:

【中文标题】有没有办法在没有 iframe 的情况下直接提供 Heroku 错误/维护 url【英文标题】:Is there a way to have a Heroku error/maintenance url served directly without the iframe 【发布时间】:2013-01-26 05:34:41 【问题描述】:

Heroku 允许您为应用程序打开“维护模式”,还允许您指定在此期间提供的自定义 URL。我刚刚尝试过,发现 Heroku 在 iframe 中提供自定义 url。这不是我所期望的。

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

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

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

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

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

【问题讨论】:

jumand,您是否设法找到一种方法来完成此任务?我现在也面临着类似的问题。 不。 :-/ 但是从那以后我们就没有调查过了。我们当时与一位客户客户经理进行了交谈,但它似乎不在路线图上。 这里有一个解决方法:***.com/a/42017093/242933. 【参考方案1】:

作为一种解决方法,您可以对 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 应用的临时维护模式。

【讨论】:

请注意,这并不能完全替代原生 Heroku 维护模式,因为它在应用重启/缩放期间不起作用。【参考方案2】:

除了此处列出的使用 iFrame 的错误页面之外,无法自定义错误页面:https://devcenter.heroku.com/articles/error-pages#customize-pages

【讨论】:

以上是关于有没有办法在没有 iframe 的情况下直接提供 Heroku 错误/维护 url的主要内容,如果未能解决你的问题,请参考以下文章

使用 querySelectorAll 时,有没有办法在不使用 ID 的情况下引用上下文节点的直接子节点?

如何在没有 iFrame 的情况下在另一个页面内显示外部网站? [关闭]

有没有办法让 IFRAME 中的内容溢出到父框架上?

在没有“保存按钮”颜色框的情况下保存 iframe 内容

java web中的filter权限过滤问题

是否可以在没有 js 的情况下跟踪主 url 中的 iFrame src?