2011-09-02 17 views
11

¿existe una manera limpia y elegante de implementar una página de Mantenimiento en una aplicación Heroku? Entonces, si algo se rompe, ¿se puede activar fácilmente un interruptor y la página de mantenimiento sube para todas las solicitudes? Preferiblemente de una manera que no requiere un empuje?¿Cuál es una forma inteligente de implementar una página de Mantenimiento en una aplicación Heroku?

Ideas? Gracias

+0

http://stackoverflow.com/questions/2244263/capistrano-to-deploy-rails-application-how-to-handle-long-migrations tiene discusión y solución para Apache similar. – leenasn

Respuesta

0

Esto probablemente se realizaría fácilmente agregando un before_filter al comienzo de la cadena de filtros que verifica una condición de modo de mantenimiento y lo redirige a la página de mantenimiento cuando corresponda.

13

NOTA Esta respuesta se dirige a las configuraciones nginx o Rack, ya que se escribieron antes de que las ediciones de la pregunta original dejaran claro que estaba buscando una respuesta específica para Heroku. La respuesta aceptada es la mejor para las aplicaciones de Heroku.


Cuando se dice "en su aplicación" es lo que realmente quiere decir en su aplicación?

Porque normalmente la solución es soltar un archivo de mantenimiento en su raíz web. Si se encuentra el archivo, se sirve con un 503 Service Not Available inmediatamente. La solicitud nunca llega a su aplicación, que presumiblemente está "fuera de servicio".

En nginx, algo como esto:

location/{ 
     if (-f $document_root/maintenance.html) { 
      return 503; 
     } 

     # continued server directives 
    } 

    error_page 503 @maintenance; 
    location @maintenance { 
      rewrite ^(.*)$ /maintenance.html break; 
    } 

No sería realmente requieren un empuje per se, pero tal vez una tarea sencilla rastrillo o algo que añadir/quitar ese archivo de mantenimiento de su aplicación. Probablemente también podría reemplazar cualquier nombre de archivo dado en la verificación -f, y simplemente touch un archivo arbitrario maintenance.whatever vacío en su raíz web, que luego dirigiría nginx para que sirva el mainenance.html.

Si no quieren (o no pueden) perder el tiempo con la configuración del servidor, este muy simple Rack middleware hace esencialmente la misma cosa: https://github.com/ddollar/rack-maintenance

+0

Usando una de las soluciones de middleware de Rack (como la mencionada en la respuesta), ¿alguien ha logrado que funcione correctamente cuando el DB está inactivo? –

1

Para añadir en la respuesta de Emanuel:

Trackman ayuda con sus páginas de mantenimiento de dev para prod .

Puede

  • Andamio usando el diseño del sitio actual (~ 0 html edición)
  • Enlace sus activos actuales dentro de su página estática
  • mirada a su diseño de página dentro de su entorno de desarrollo

Implementará todo en S3 cuando presione a Heroku y ni siquiera tiene que configurar una cuenta en S3.

También tiene que ejecutar

rake trackman:setup 

Así puntos heroku a sus páginas S3, mientras que en el modo de mantenimiento.

http://www.trackman-addon.com

Cuestiones relacionadas