Problemi di debug dell'app Sinatra in produzione
Domanda
Sto implementando un'app Sinatra tramite passeggero. L'app distribuita funziona, ma non del tutto: alcuni percorsi funzionano bene, altri semplicemente rendono una pagina vuota. Non riesco a trovare alcuna differenza sostanziale tra le rotte che funzionano e le rotte che non lo fanno e non riesco a rintracciare eventuali errori.
gestori
Ho definito i gestori not_found ed error come segue:
not_found do
'404. Bummer!'
end
error do
'Nasty error: ' + env['sinatra.error'].name
end
Funzionano perfettamente sul mio computer locale, sia nello sviluppo che nella produzione, ma non li vedo mai arrivare sul server.
Log di Apache
Quando seguo il file access.log di Apache e raggiungo uno dei percorsi interrotti, vedo 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
Ho anche installato e configurato rack_hoptoad middleware nel mio config.ru, ma non ci sono eccezioni sperare.
# Send exceptions to hoptoad
require 'rack_hoptoad'
use Rack::HoptoadNotifier, 'MY_API_KEY'
Registrazione
Ho impostato la registrazione in questo modo ..
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
Questa configurazione mi permette di chiamare logger.info nei miei percorsi, che funziona localmente e sul server per i percorsi di lavoro, ma i percorsi interrotti non sono abbastanza lontani da chiamare logger.info.
Cosa fare?
Qualche idea su come posso vedere cosa sta causando i 500 errori? Grazie per l'aiuto!
Soluzione
Proverei a usare il middleware Rack :: ShowExceptions per provare a rintracciare il problema. Nel tuo config.ru aggiungi queste due linee prima della chiamata di esecuzione:
require 'rubygems'
require 'your-app'
use Rack::ShowExceptions
run YourApp
Questo dovrebbe catturare e visualizzare la backtrace per eventuali eccezioni che si verificano nel Rack o nella tua app. Questo dovrebbe darti maggiori dettagli con cui lavorare, almeno questa sarebbe la speranza.
Altri suggerimenti
Forse c'è qualcosa che non va nella configurazione del tuo registro?
Reindirizza STDERR quando esegui il server Sinatra in modo da poterlo leggere. Come:
ruby myapp.rb -p 1234 > log/app.log 2>&1
Grazie per le risposte, ma non ho finito per usarle. Inizialmente stavo distribuendo l'app in una sub-URI configuration . Quando invece ho distribuito l'app nel suo sottodominio, i problemi sono scomparsi.
Quindi .. Non sono davvero sicuro di quale fosse il problema, ma liberarmi di questa linea è la mia configurazione di Apache per il sito è ciò che ha risolto le cose:
Redirect permanent / https://www.example.org/admin/member_photos/