Haben Sie Probleme beim Debuggen von Sinatra App in der Produktion
Frage
ich den Einsatz einer Sinatra App Passagier. Die eingesetzte App funktioniert, aber nicht ganz: einige Pfade funktionieren, andere einfach eine leere Seite machen. Ich kann nicht scheinen keine großen Unterschiede zwischen den Routen zu finden, die funktionieren und die Routen, die dies nicht tun, und ich kann nicht alle Fehler auf die Spur scheinen ..
Handlers
Ich habe die not_found und Fehlerbehandlungsroutinen wie folgt definiert:
not_found do
'404. Bummer!'
end
error do
'Nasty error: ' + env['sinatra.error'].name
end
Diese arbeiten auf meinem lokalen Rechner, sowohl in der Entwicklung und Produktion, aber ich sehe nie diese auf dem Server kommen.
Apache Logs
Wenn ich access.log Schwanz Apache und eine der gebrochenen Wege getroffen, ich sehe ein 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
Ich habe auch installiert und konfiguriert rack_hoptoad Middleware in meinem config.ru, aber keine Ausnahmen machen es hoptoad.
# Send exceptions to hoptoad
require 'rack_hoptoad'
use Rack::HoptoadNotifier, 'MY_API_KEY'
Anmeldung
Ich habe wie so einrichten Anmeldung ..
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
Dieses Setup ermöglicht rufen Sie mich an logger.info in meine Routen, die lokal und auf dem Server für die Arbeitswege funktioniert, aber die gebrochenen Pfade nicht weit genug zu nennen logger.info.
Was tun?
Alle Ideen, wie kann ich sehen, was die 500 Fehler verursacht? Vielen Dank für jede Hilfe!
Lösung
Ich würde versuchen, die Rack :: ShowExceptions Middleware, um zu versuchen und das Problem nachzuzuspüren. In Ihrem config.ru fügen diese beiden Zeilen vor dem Lauf Aufruf:
require 'rubygems'
require 'your-app'
use Rack::ShowExceptions
run YourApp
Das sollte vorkommendes den Backtrace für Ausnahmen in Rack-oder in der App fangen und anzuzeigen. Das sollte Ihnen mehr Details geben, mit zu arbeiten, dass zumindest die Hoffnung sein würde.
Andere Tipps
Vielleicht gibt es etwas falsch mit Ihrem Log-Setup?
Redirect STDERR beim Ausführen des Sinatra-Server, so dass Sie es lesen kann. Wie:
ruby myapp.rb -p 1234 > log/app.log 2>&1
Danke für die Antworten, aber ich habe nicht am Ende brauchen, sie zu nutzen. Ich war ursprünglich die Bereitstellung der App in einem Unter URI Konfiguration . Wenn ich die Anwendung bereitgestellt, um es stattdessen eigene Sub-Domain ist, gingen die Probleme weg.
Also .. ich bin nicht wirklich sicher, was das Problem war, aber diese Linie loszuwerden ist meine Apache-Konfiguration für die Website ist, was die Dinge gelöst:
Redirect permanent / https://www.example.org/admin/member_photos/