Почему я получаю сообщение об ошибке при первом запросе после перезапуска приложения Sinatra с Rack и Phusion Passenger?

После того, как я касаюсь tmp/restart.txt и мое приложение перезапускается, первый запрос выдает ошибку, обычно что-то о том, что не найден Haml::Engine или какой-то другой драгоценный камень. Второй и последующие запросы работают нормально. У меня была эта проблема на Dreamhost, на котором работали Rack 0.4.1 и Sinatra 0.3.3, но после перехода на мой собственный хост и запуска более новых Rack (0.9.1) и Sinatra (0.9.0.4) я все еще вижу проблему.

Если вы не знаете точного ответа, но у вас есть советы, как я могу его отследить, дайте мне знать.

Вот мой config.ru:

require 'rubygems'
require 'sinatra'

disable :run
set :environment, :production
set :raise_errors, true

require 'app.rb'
run Sinatra::Application

person Brian Deterling    schedule 24.02.2009    source источник


Ответы (2)


Я бы позаботился о том, чтобы убедиться, что вам нужны все необходимые драгоценные камни. Возможно, в том порядке, в котором вы это делаете, есть что-то, из-за чего он не срабатывает в первый раз. Вам требуется rubygems?

Также может помочь, если вы опубликуете конфигурацию стойки для приложения (config.ru).

person rfunduk    schedule 09.03.2009
comment
Да, мне требуются rubygems, и он отлично работает автономно или вручную. Я добавил свой config.ru в исходный вопрос, как вы и предложили. Похоже, что Passenger не перезапускает приложение до тех пор, пока не поступит первый запрос, и этот запрос не столкнется с проблемой синхронизации, потому что он все еще возникает. - person Brian Deterling; 11.03.2009
comment
Все выглядит нормально с вашей конфигурацией стойки. Единственное, что осталось предложить, — это попробовать простое приложение «Hello World» и посмотреть, произойдет ли то же самое. Похоже, поскольку ваше приложение показывает одну и ту же проблему на нескольких хостах, это как-то связано с самим вашим приложением. Может быть, также обновить все ваши драгоценные камни? - person rfunduk; 11.03.2009
comment
Давненько на это не смотрел, но теперь, кажется, у меня нет проблемы, и единственное, о чем я могу думать, это то, что я использую более новую версию Sinatra (0.9.1.1), и поскольку вы упомянули об обновлении драгоценных камней , вы получаете галочку по умолчанию. - person Brian Deterling; 11.11.2009

Ошибка вызвана слишком поздней загрузкой драгоценного камня Sinatra. Это решение:


#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
person Tim Inman    schedule 21.04.2011