Возникли проблемы с отладкой приложения Sinatra в рабочей среде
Вопрос
Я развертываю приложение Sinatra с помощью passenger.Развернутое приложение работает, но не полностью:некоторые пути работают нормально, другие просто отображают пустую страницу.Кажется, я не могу найти каких-либо существенных различий между маршрутами, которые работают, и маршрутами, которые этого не делают, и, похоже, я не могу отследить какие-либо ошибки..
Обработчики
Я определил обработчики not_found и error следующим образом:
not_found do
'404. Bummer!'
end
error do
'Nasty error: ' + env['sinatra.error'].name
end
Они прекрасно работают на моем локальном компьютере, как в процессе разработки, так и в производстве, но я никогда не вижу, чтобы они появлялись на сервере.
Журналы Apache
Когда я слежу за доступом Apache.регистрируюсь и нажимаю на один из неработающих путей, я вижу 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 стоек
Я также установил и настроил rack_hoptoad стоек промежуточное программное обеспечение в my config.ru, но никакие исключения не попадают в hoptoad.
# Send exceptions to hoptoad
require 'rack_hoptoad'
use Rack::HoptoadNotifier, 'MY_API_KEY'
ведение журнала
Я настроил ведение журнала следующим образом..
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
Эта настройка позволяет мне вызывать logger.info в рамках моих маршрутов, который работает локально и на сервере для рабочих маршрутов, но неработающие пути не проходят достаточно далеко для вызова logger.info.
Что же делать?
Есть какие-нибудь идеи относительно того, как я могу увидеть, что вызывает 500 ошибок?Спасибо за любую помощь!
Решение
Я бы попробовал использовать промежуточное программное обеспечение Rack:: ShowExceptions, чтобы попытаться устранить проблему.В вашем config.ru добавьте эти две строки перед вызовом run:
require 'rubygems'
require 'your-app'
use Rack::ShowExceptions
run YourApp
Это должно перехватывать и отображать обратную трассировку для любых исключений, возникающих в Rack или в вашем приложении.Это должно дать вам больше деталей для работы, по крайней мере, на это можно было бы надеяться.
Другие советы
Может быть, что-то не так с настройкой вашего журнала?
Перенаправьте STDERR при запуске сервера Sinatra, чтобы вы могли его прочитать.Нравится:
ruby myapp.rb -p 1234 > log/app.log 2>&1
Спасибо за ответы, но в конечном итоге мне не понадобилось их использовать.Изначально я развертывал приложение в конфигурация вложенного URI.Когда я вместо этого развернул приложение на его собственном поддомене, проблемы исчезли.
Итак..Я не совсем уверен, в чем была проблема, но избавление от этой строки - это моя конфигурация Apache для сайта, которая решила проблему:
Redirect permanent / https://www.example.org/admin/member_photos/