Проблемы с отладкой приложения Sinatra в производстве

Я использую приложение Sinatra с помощью пассажира. Развернутое приложение работает, но не полностью: некоторые пути работают нормально, другие просто создают пустую страницу. Кажется, я не вижу существенных различий между маршрутами, которые работают, и маршрутов, которые этого не делают, и я не могу найти никаких ошибок.

Обработчики

Я определил обработчики not_found и ошибок следующим образом:

not_found do
  '404. Bummer!'
end

error do
  'Nasty error: ' + env['sinatra.error'].name
end

Они отлично работают на моей локальной машине, как в разработке, так и в производстве, но я никогда не вижу, чтобы они появились на сервере.

Журналы Apache

Когда я заканчиваю доступ Apache access.log и ударяю один из сломанных путей, я вижу 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 промежуточное программное обеспечение в моем 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 ошибок? Спасибо за любую помощь!

Ответ 1

Я попытался бы использовать промежуточное программное обеспечение Rack:: ShowExceptions, чтобы попытаться выявить проблему. В вашем config.ru добавьте эти две строки перед вызовом run:

require 'rubygems'
require 'your-app'

use Rack::ShowExceptions

run YourApp

Это должно ловить и отображать обратную линию для любых исключений, происходящих в стойке или в вашем приложении. Это должно дать вам больше информации для работы, по крайней мере, это будет надеждой.

Ответ 2

Может быть, что-то не так с настройкой журнала?

Перенаправить STDERR при запуске сервера Sinatra, чтобы вы могли его прочитать. Как:

ruby myapp.rb -p 1234 > log/app.log 2>&1

Ответ 3

Спасибо за ответы, но я не нуждался в их использовании. Первоначально я развертывал приложение в конфигурации под-URI. Когда я применил приложение к своему собственному субдомену, проблемы исчезли.

Итак... Я не совсем уверен, в чем проблема, но избавиться от этой строки - моя конфигурация Apache для сайта - это то, что разрешено:

Redirect permanent / https://www.example.org/admin/member_photos/