我正在使用乘客部署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中安装并配置了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错误的原因的任何想法?谢谢你的帮助!
答案 0 :(得分:6)
我会尝试使用Rack :: ShowExceptions中间件来尝试找出问题所在。在你的config.ru中,在运行调用之前添加这两行:
require 'rubygems'
require 'your-app'
use Rack::ShowExceptions
run YourApp
这应该捕获并显示Rack或您的应用中发生的任何异常的回溯。这应该会给你更多的细节,至少这是希望。
答案 1 :(得分:1)
您的日志设置可能有问题吗?
运行Sinatra服务器时重定向STDERR,以便您可以读取它。像:
ruby myapp.rb -p 1234 > log/app.log 2>&1
答案 2 :(得分:0)
感谢您的回复,但我最终还是不需要使用它们。我最初是在sub-URI configuration部署应用程序。当我将应用程序部署到它自己的子域时,问题就消失了。
所以..我不是很确定问题是什么,但摆脱这一行是我的网站的Apache配置是解决的事情:
Redirect permanent / https://www.example.org/admin/member_photos/