[英]Within a rack application, how can I tell which web server is running?
在機架應用程序中,如何確定哪個Web服務器作為機架處理程序運行?
例如,從config.ru中,我要打開是否正在運行WEBrick:
unless running_webrick?
redirect_stdout_and_stderr_to_file
end
run App
def running_webrick?
???
end
傳遞到堆棧中每個組件的環境哈希具有SERVER_SOFTWARE
密鑰。 運行此命令並觀察網頁上的輸出:
require 'rack'
class EnvPrinter
def call env
[200, {'content-type' => 'text/plain'}, [env.inspect]]
end
end
run EnvPrinter.new
如果使用rackup執行,則將使用webrick作為服務器(這是默認設置),而SERVER_SOFTWARE
將類似於WEBrick/1.3.1 (Ruby/1.9.3/2013-01-15)
。 如果使用獨角獸,它將類似於Unicorn 4.5.0
。 此機架式代碼根據運行在哪個服務器上返回自定義響應:
require 'rack'
class EnvPrinter
def call env
response = case env.fetch('SERVER_SOFTWARE')
when /webrick/i then 'Running on webrick'
when /unicorn/i then 'Running on unicorn'
when /thin/i then 'Running on thin'
else "I don't recognize this server"
end
[200, {'content-type' => 'text/plain'}, [response]]
end
end
run EnvPrinter.new
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.