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!

È stato utile?

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/
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top