Ruby 在生产中调试Sinatra应用程序时遇到问题

Ruby 在生产中调试Sinatra应用程序时遇到问题,ruby,debugging,sinatra,passenger,rack,Ruby,Debugging,Sinatra,Passenger,Rack,我正在使用passenger部署Sinatra应用程序。部署的应用程序正在工作,但并不完全正常:一些路径工作正常,其他路径只是呈现一个空白页面。我似乎找不到有效路线和无效路线之间的任何主要区别,也找不到任何错误 处理程序 我定义了not_found和错误处理程序,如下所示: not_found do '404. Bummer!' end error do 'Nasty error: ' + env['sinatra.error'].name end 在我的本地机器上,无论是在开发还是

我正在使用passenger部署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

我也在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个错误,有什么想法吗?谢谢你的帮助

您的日志设置可能有问题

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

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

我将尝试使用Rack::ShowExceptions中间件来尝试并找出问题所在。在config.ru中,在运行调用之前添加以下两行:

require 'rubygems'
require 'your-app'

use Rack::ShowExceptions

run YourApp

这将捕获并显示机架或应用程序中发生的任何异常的回溯。这会给你更多的细节,至少这是希望。

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

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

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

您是否尝试在httpd上安装简单的应用程序?就像一个“多么低的世界”的应用程序。只需获得“/”do;'多么低的世界';首先检查它,然后下一步检查你的应用程序。请在httpd和config文件上检查您的简单应用程序。顺便说一下,我想你不能在sinatra上获得一些https日志。