无法在生产中调试Sinatra应用程序

Zek*_*eke 11 ruby debugging rack passenger sinatra

我正在使用乘客部署Sinatra应用程序.已部署的应用程序正在运行,但并非完全有效:某些路径工作正常,其他路径只是呈现空白页面.我似乎无法找到工作路线和没有工作的路线之间的任何重大差异,我似乎无法追查任何错误..

处理程序

我已经定义了not_found和错误处理程序,如下所示:

not_found do
  '404. Bummer!'
end

error do
  'Nasty error: ' + env['sinatra.error'].name
end
Run Code Online (Sandbox Code Playgroud)

这些在我的本地机器上工作正常,无论是在开发还是生产中,但我从未在服务器上看到这些.

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"
Run Code Online (Sandbox Code Playgroud)

rack_hoptoad

我还在我的config.ru中安装并配置了rack_hoptoad中间件,但没有例外,它正在跳转到hoptoad.

# Send exceptions to hoptoad
require 'rack_hoptoad'
use Rack::HoptoadNotifier, 'MY_API_KEY'
Run Code Online (Sandbox Code Playgroud)

记录

我已经设置了这样的日志..

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
Run Code Online (Sandbox Code Playgroud)

这个设置允许我在我的路由中调用logger.info,它在本地和服务器上用于工作路由,但是破坏的路径远远不足以调用logger.info.

该怎么办?

关于如何看到导致500错误的原因的任何想法?谢谢你的帮助!

pla*_*mer 6

我会尝试使用Rack :: ShowExceptions中间件来尝试找出问题所在.在你的config.ru中,在运行调用之前添加这两行:

require 'rubygems'
require 'your-app'

use Rack::ShowExceptions

run YourApp
Run Code Online (Sandbox Code Playgroud)

这应该捕获并显示Rack或您的应用中发生的任何异常的回溯.这应该会给你更多的细节,至少这将是希望.