slowpoke
1.0.0
Rack::Rails 的逾時增強功能
將此行新增至應用程式的 Gemfile 中:
gem "slowpoke"
並運行:
rails generate slowpoke:install
這將建立一個您可以自訂的public/503.html
。
若要在開發中嘗試自訂錯誤頁面,請暫時新增至config/environments/development.rb
:
config . slowpoke . timeout = 1
config . consider_all_requests_local = false
並在您的其中一項操作中加入sleep
呼叫:
sleep ( 2 )
應出現自訂錯誤頁面。
預設超時為 15 秒。您可以在config/environments/production.rb
中更改此設定:
config . slowpoke . timeout = 5
對於動態逾時,請使用:
config . slowpoke . timeout = lambda do | env |
request = Rack :: Request . new ( env )
request . path . start_with? ( "/admin" ) ? 15 : 5
end
訂閱超時:
ActiveSupport :: Notifications . subscribe "timeout.slowpoke" do | name , start , finish , id , payload |
# report timeout
end
要了解更多信息,請參閱 Rack::Timeout 文件。
Rack::Timeout 可以在程式碼中的任何點引發異常,這可能會使您的應用程式處於不乾淨的狀態。從請求逾時中恢復的最安全方法是產生一個新進程。這是 Slowpoke 的預設行為。
對於像 Puma 這樣的線程伺服器,這意味著當其中任何一個線程超時時,將殺死所有線程。這會對性能產生重大影響。
您可以透過以下方式自訂此行為:
Slowpoke . on_timeout do | env |
next if Rails . env . development? || Rails . env . test?
exception = env [ "action_dispatch.exception" ]
if exception && exception . backtrace . first . include? ( "/active_record/" )
Slowpoke . kill
end
end
注意:要在開發中存取env["action_dispatch.exception"]
,請暫時加入config/environments/development.rb
:
config . consider_all_requests_local = false
設定語句超時和連線逾時是個好主意。對於 Postgres,您的config/database.yml
應包含以下內容:
production :
connect_timeout : 3 # sec
variables :
statement_timeout : 5s
查看變更日誌
鼓勵每個人幫助改進這個項目。您可以透過以下幾種方式提供協助:
開始開發:
git clone https://github.com/ankane/slowpoke.git
cd slowpoke
bundle install
bundle exec rake test