Tiene problemas para depurar la aplicación Sinatra en producción
Pregunta
Estoy implementando una aplicación Sinatra con pasajeros. La aplicación implementada funciona, pero no del todo: algunas rutas funcionan bien, otras simplemente muestran una página en blanco. Parece que no puedo encontrar ninguna diferencia importante entre las rutas que funcionan y las que no, y parece que no puedo rastrear ningún error ...
Handlers
He definido los manejadores de errores y no encontrados de la siguiente manera:
not_found do
'404. Bummer!'
end
error do
'Nasty error: ' + env['sinatra.error'].name
end
Funcionan bien en mi máquina local, tanto en desarrollo como en producción, pero nunca veo que aparezcan en el servidor.
Registros de Apache
Cuando sigo el acceso.log de Apache y golpeo una de las rutas rotas, veo un 500:
helpers [27/Oct/2009:15:54:59 -0400] "GET /admin/member_photos/photos HTTP/1.1" 500 20 "-" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3"
rack_hoptoad
También instalé y configuré rack_hoptoad middleware en mi config.ru, pero no hay excepciones. a saltar.
# Send exceptions to hoptoad
require 'rack_hoptoad'
use Rack::HoptoadNotifier, 'MY_API_KEY'
logging
He configurado el registro de esta manera ...
set :raise_errors => true
set :logging, true
log = File.new("log/sinatra.log", "a+")
STDOUT.reopen(log)
STDERR.reopen(log)
require 'logger'
configure do
LOGGER = Logger.new("log/sinatra.log")
end
helpers do
def logger
LOGGER
end
end
Esta configuración me permite llamar a logger.info dentro de mis rutas, que funciona localmente y en el servidor para las rutas de trabajo, pero las rutas rotas no llegan lo suficientemente lejos como para llamar a logger.info.
¿Qué hacer?
¿Alguna idea de cómo puedo ver qué está causando los 500 errores? ¡Gracias por cualquier ayuda!
Solución
Intentaría usar el middleware Rack :: ShowExceptions para tratar de rastrear el problema. En su config.ru, agregue estas dos líneas antes de la llamada de ejecución:
require 'rubygems'
require 'your-app'
use Rack::ShowExceptions
run YourApp
Eso debería capturar y mostrar la traza inversa para cualquier excepción que ocurra en Rack o en su aplicación. Eso debería darle más detalles para trabajar, al menos esa sería la esperanza.
Otros consejos
¿Quizás haya algún problema con la configuración de su registro?
Redirija STDERR cuando ejecute el servidor Sinatra para que pueda leerlo. Me gusta:
ruby myapp.rb -p 1234 > log/app.log 2>&1
Gracias por las respuestas, pero no terminé necesitando usarlas. Originalmente estaba implementando la aplicación en una configuración de sub-URI . Cuando implementé la aplicación en su propio subdominio, los problemas desaparecieron.
Entonces ... no estoy realmente seguro de cuál era el problema, pero deshacerme de esta línea es mi configuración de Apache para el sitio lo que resolvió las cosas:
Redirect permanent / https://www.example.org/admin/member_photos/