11

我正在使用乘客部署 Sinatra 应用程序。部署的应用程序正在运行,但并非完全正常:一些路径运行良好,其他路径只是呈现空白页面。我似乎找不到有效的路线和无效的路线之间的任何主要区别,而且我似乎无法找到任何错误..

处理程序

我定义了 not_found 和错误处理程序如下:

not_found do
  '404. Bummer!'
end

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

这些在我的本地机器上运行良好,无论是在开发还是生产中,但我从来没有看到这些出现在服务器上。

阿帕奇日志

当我跟踪 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

我还在我的 config.ru 中安装并配置了 rack_hoptoad中间件,但没有例外将其用于 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 错误的原因的任何想法?谢谢你的帮助!

4

3 回答 3

6

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

require 'rubygems'
require 'your-app'

use Rack::ShowExceptions

run YourApp

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

于 2009-11-01T01:07:08.717 回答
1

也许您的日志设置有问题?

运行 Sinatra 服务器时重定向 STDERR,以便您可以阅读它。像:

ruby myapp.rb -p 1234 > log/app.log 2>&1
于 2009-10-31T18:25:05.333 回答
0

感谢您的回复,但我最终不需要使用它们。我最初是在子 URI 配置中部署应用程序。当我将应用程序部署到它自己的子域时,问题就消失了。

所以..我不太确定问题出在哪里,但摆脱这一行是我为该站点配置的 Apache 解决了问题:

Redirect permanent / https://www.example.org/admin/member_photos/
于 2009-11-05T18:31:42.333 回答