在Heroku应用程序中实现维护页面的智能方法是什么?

AnA*_*ice 11 ruby-on-rails heroku ruby-on-rails-3

是否有一种干净,优雅的方式在Heroku应用程序中实现维护页面?因此,如果出现问题,您可以非常轻松地转换开关,维护页面可以满足所有要求吗?最好是一种不需要推动的方式?

想法?谢谢

num*_*407 13

注意这个答案解决了nginx或Rack设置问题,因为它是在编辑原始问题之前编写的,清楚地表明正在寻找特定于Heroku的答案.接受的答案最适合Heroku应用程序.


当你说"在你的应用程序中"你真的你的应用程序中意味着什么?

因为通常解决方案是在Web根目录中删除维护文件.如果找到该文件,则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;
    }
Run Code Online (Sandbox Code Playgroud)

它本身并不需要推送,但可能是一个简单的rake任务或者从你的app添加/删除该维护文件的东西.您也可以替换-f支票中的任何给定文件名,只需在您的网络根目录中找到touch一个空的任意maintenance.whatever文件,然后指示nginx提供服务mainenance.html.

如果你不想(或不能)搞乱服务器配置,这个非常简单的Rack中间件基本上做同样的事情:https: //github.com/ddollar/rack-maintenance


Joh*_*non 7

或者在这种情况下使用Heroku自己的维护模式 - http://devcenter.heroku.com/articles/maintenance-mode