Por que recebo um erro no primeiro pedido depois de reiniciar um aplicativo de Sinatra com cremalheira e Phusion Passenger?
Pergunta
Depois de eu tocar tmp / restart.txt e meu aplicativo for reiniciado, o primeiro pedido gera um erro, geralmente algo sobre não encontrar Haml :: motor ou alguma outra jóia. A segunda e as solicitações subseqüentes todos funcionam bem. Eu estava tendo este problema na Dreamhost que estava correndo cremalheira 0.4.1 e 0.3.3 Sinatra, mas depois de se mudar para o meu próprio host e execução de um rack mais recente (0.9.1) e Sinatra (0.9.0.4) Eu ainda vejo o problema.
Se você não sabe a resposta exata, mas tem dicas sobre como eu poderia rastreá-lo, por favor me avise.
Aqui está a minha config.ru:
require 'rubygems'
require 'sinatra'
disable :run
set :environment, :production
set :raise_errors, true
require 'app.rb'
run Sinatra::Application
Solução
Eu olhava para ter certeza que você está exigindo que todos os gems necessárias. Talvez haja algo sobre a ordem que você está fazendo que está causando isso falhar pela primeira vez. Você está exigindo rubygems
?
Ele pode também ajuda se você postou sua configuração de rack para o aplicativo (config.ru
).
Outras dicas
O erro é causado pela jóia de carregamento Sinatra tarde demais. Esta é a solução:
#config.ru ENV['GEM_HOME'] ||= `gem env path`.strip.split(':').first ENV['GEM_PATH'] ||= `gem env path`.strip Gem.clear_paths require 'application-filename-goes-here' set :environment, :production run Sinatra::Application