代码之家  ›  专栏  ›  技术社区  ›  Zeke

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

  •  11
  • Zeke  · 技术社区  · 15 年前

    我正在使用Passenger部署Sinatra应用程序。部署的应用程序正在工作,但并非完全正常:一些路径工作正常,其他路径只呈现空白页。我似乎找不到工作的路线和不工作的路线之间的任何主要区别,而且我似乎也找不到任何错误。

    处理程序

    我定义了如下未找到和错误处理程序:

    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。

    怎么办?

    关于我如何才能看到导致500个错误的原因有什么想法吗?谢谢你的帮助!

    3 回复  |  直到 15 年前
        1
  •  6
  •   plainprogrammer    15 年前

    我将尝试使用Rack::ShowExceptions中间件来尝试并跟踪问题。在config.ru中,在运行调用之前添加这两行:

    require 'rubygems'
    require 'your-app'
    
    use Rack::ShowExceptions
    
    run YourApp
    

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

        2
  •  1
  •   Pedro    15 年前

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

    运行Sinatra服务器时重定向stderr,以便读取。像:

    ruby myapp.rb -p 1234 > log/app.log 2>&1
    
        3
  •  0
  •   Zeke    15 年前

    谢谢你的回复,但我最终不需要使用它们。我最初是在 sub-URI configuration . 当我把这个应用部署到它自己的子域时,问题就消失了。

    所以……我不太确定问题是什么,但是去掉这一行是我为站点配置的Apache解决了以下问题:

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