在生产环境中调试Sinatra应用程序遇到了问题

11

我正在使用passenger部署一个Sinatra应用程序。已经成功运行了应用程序,但有些路径可以正常工作,而其他路径则只呈现空白页面。我似乎找不出工作和不工作路由之间的重大差异,并且我无法追踪任何错误。

处理程序

我已经定义了not_found和error处理程序如下:

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错误吗?谢谢任何帮助!


你尝试在httpd上运行简单的应用程序了吗?比如一个“Hello World”的应用程序。
只需在代码中添加以下内容:get '/' do; 'Hello World';end
首先检查它,然后再检查你的应用程序。请检查您在httpd上的简单应用程序和配置文件。顺便说一下,在Sinatra上可能无法获取某些https日志。
- tknv
3个回答

6

我建议您尝试使用Rack::ShowExceptions中间件来跟踪问题。在config.ru文件中,在run调用之前添加以下两行:

require 'rubygems'
require 'your-app'

use Rack::ShowExceptions

run YourApp

这应该能够捕获并显示Rack或您的应用程序中发生的任何异常的回溯。这将为您提供更多细节,至少这是我们的希望。


1

你的日志设置可能有问题了吗?

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

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

0

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

所以...我不太确定问题出在哪里,但是删除我的Apache站点配置中的这行代码解决了问题:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接