簡體   English   中英

如何顯示由乘客托管的模塊化Sinatra應用程序中發生的錯誤?

[英]How to show errors that occur in a modular Sinatra Application which is hosted by Passenger?

我有一個應用程序課

class MyApplication < Sinatra::Base
  # ... do something ...
end

和config.ru文件

# ... load libraries ...
run MyApplication

我通常將Passenger作為我的開發環境,對於正常的(非模塊化)Sinatra應用程序來說,它可以很好地工作。 但是在這種情況下,我沒有錯誤輸出,而是獲得了默認的內部服務器錯誤頁面,該頁面不是很有幫助。 有沒有一種方法可以啟用默認錯誤處理?

我已經被這個問題困擾了好一陣子了,終於找到了神奇的咒語來恢復默認的錯誤處理。 事實證明,它與Passenger無關,而是由使用Sinatra :: Base而不是經典(頂級)應用程序引起的。 如果您將Sinatra :: Base子類化,則許多選項具有不同的默認值。 在這種情況下,您需要更改的選項是:

set :show_exceptions, true if development?

如果您還想重新啟用使用應用程序內錯誤處理程序的(相關)功能,請使用:

set :raise_errors, false

允許error do ... end塊像在經典應用程序中那樣工作。

有關經典應用程序和Sinatra :: Base應用程序之間差異的其他信息,可以在此燈塔票中找到,並且在Google小組中對此特定差異進行了一些討論

您可以使用Rack :: ShowExceptions顯示堆棧跟蹤

configure do
  enable :dump_errors,:raise_errors
  use Rack::ShowExceptions
end

並使用Sinatra錯誤處理程序顯示

$exception = Sinatra::ShowExceptions.new(self)
error do 
  @error = env['sinatra_error']
  html_body = $exception.pretty(env,@error)
end

查看您的Web服務器錯誤日志。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM