Rack 提供了一個最小的、模組化的、適應性強的接口,用於在 Ruby 中開發 Web 應用程式。透過以最簡單的方式包裝 HTTP 請求和回應,它將 Web 伺服器、Web 框架和 Web 應用程式之間的橋樑統一併提煉為單一方法呼叫。
機架規範中描述了其具體細節,所有機架應用程式都應遵守該規範。
版本 | 支援 |
---|---|
3.1.x | 錯誤修復和安全補丁。 |
3.0.x | 僅安全補丁。 |
2.2.x | 僅安全補丁。 |
<= 2.1.x | 支援結束。 |
請參閱安全政策以獲取更多資訊。
這是機架的最新版本。它包含錯誤修復和安全補丁。請檢查變更日誌以取得有關特定變更的詳細資訊。
此版本的機架包含重大更改,升級指南中詳細介紹了這些更改。建議盡快升級到機架 3,以獲得最新的功能和安全修補程式。
此版本的 Rack 僅接收安全補丁,應努力遷移到 Rack 3。
從 Ruby 3.4 開始, base64
依賴項將不再是預設 gem,並且可能會導致缺少base64
警告或錯誤。若要修正此問題,請將base64
作為依賴項新增至您的專案中。
將rack gem 新增到您的應用程式套件中,或按照支援的 Web 框架提供的說明進行操作:
# Install it generally:
$ gem install rack
# or, add it to your current application gemfile:
$ bundle add rack
如果您需要Rack::Session
或bin/rackup
中的功能,請單獨新增這些 gem。
$ gem install rack-session rackup
建立一個名為config.ru
的文件,其中包含以下內容:
run do | env |
[ 200 , { } , [ "Hello World" ] ]
end
使用rackup gem 或其他支援的Web 伺服器執行此程式。
$ gem install rackup
$ rackup
# In another shell:
$ curl http://localhost:9292
Hello World
機架受到多種伺服器的支持,包括:
您需要查閱伺服器文件以了解它們可能具有哪些功能和限制。一般來說,任何有效的 Rack 應用程式都將在所有這些伺服器上以相同的方式運行,無需進行任何更改。
Rack 提供了一個單獨的 gem,rackup,它是一個通用接口,用於在支援的伺服器上運行 Rack 應用程序,其中包括WEBRick
、 Puma
、 Falcon
等。
這些框架和許多其他框架都支援機架規範:
在伺服器和框架之間,Rack 可以使用中間件根據您的應用程式需求進行客製化。 Rack 本身附帶以下中間件:
Rack::CommonLogger
用於建立 Apache 風格的日誌檔案。Rack::ConditionalGet
用於在回應未變更時傳回 Not Modified 回應。Rack::Config
用於在處理請求之前修改環境。Rack::ContentLength
用於根據正文大小設定content-length
標頭。Rack::ContentType
用於設定回應的預設content-type
標頭。Rack::Deflater
用於使用 gzip 壓縮響應。Rack::ETag
用於在可緩衝的實體上設定etag
標頭。Rack::Events
。Rack::Files
用於提供靜態檔案。Rack::Head
用於為 HEAD 請求傳回一個空主體。Rack::Lint
用於檢查是否符合機架規範。Rack::Lock
用於使用互斥體序列化請求。Rack::MethodOverride
用於根據提交的參數修改請求方法。Rack::Recursive
用於包含應用程式中其他路徑的數據,以及執行內部重定向。Rack::Reloader
用於重新載入已修改的檔案。Rack::Runtime
,用於包含回應標頭以及處理請求所需的時間。Rack::Sendfile
用於使用可對檔案系統路徑使用最佳化檔案服務的 Web 伺服器。Rack::ShowException
用於捕獲未處理的異常,並透過可單擊的回溯以良好且有用的方式呈現它們。Rack::ShowStatus
用於使用漂亮的錯誤頁面來進行空白客戶端錯誤回應。Rack::Static
用於更可設定的靜態檔案服務。Rack::TempfileReaper
用於刪除請求期間建立的暫存檔案。所有這些組件都使用相同的接口,機架規範中對此進行了詳細描述。這些可選組件可以按照您希望的任何方式使用。
如果您想在現有框架之外進行開發、實現自己的框架或開發中間件,Rack 提供了許多幫助程序來快速創建 Rack 應用程序,而無需重複執行相同的 Web 操作:
Rack::Request
也提供查詢字串解析和多部分處理。Rack::Response
用於方便產生 HTTP 回覆和 cookie 處理。Rack::MockRequest
和Rack::MockResponse
用於高效、快速地測試 Rack 應用程序,無需真正的 HTTP 往返。Rack::Cascade
用於在應用程式傳回未找到或方法不支援的回應時嘗試其他 Rack 應用程式。Rack::Directory
,用於在給定目錄下提供檔案服務,並附有目錄索引。Rack::MediaType
用於解析內容類型標頭。Rack::Mime
用於根據檔案副檔名決定內容類型。Rack::RewindableInput
用於使用臨時檔案緩衝區使任何 IO 物件可回滾。Rack::URLMap
用於路由到同一進程內的多個應用程式。 Rack 公開了幾個配置參數來控制實現的各種功能。
param_depth_limit
Rack :: Utils . param_depth_limit = 32 # default
參數中允許的最大嵌套數量。例如,如果設定為 3,則允許使用以下查詢字串:
?a[b][c]=d
但不允許使用此查詢字串:
?a[b][c][d]=e
限制深度可以防止解析參數時可能出現的堆疊溢位。
multipart_file_limit
Rack :: Utils . multipart_file_limit = 128 # default
請求可以包含的檔案名稱部分的最大數量。接受太多部分可能會導致伺服器耗盡檔案句柄。
預設值為128,這表示單一請求不能一次上傳超過128個檔案。設定為 0 表示無限制。
也可以透過RACK_MULTIPART_FILE_LIMIT
環境變數進行設定。
(為了相容性,這也被別名為multipart_part_limit
和RACK_MULTIPART_PART_LIMIT
)
multipart_total_part_limit
請求可以包含任何類型的部分的最大總數,包括文件和非文件表單欄位。
預設值為 4096,這表示單一請求不能包含超過 4096 個部分。
設定為 0 表示無限制。
也可以透過RACK_MULTIPART_TOTAL_PART_LIMIT
環境變數進行設定。
請參閱 CHANGELOG.md。
有關如何為 Rack 做出貢獻的具體詳細信息,請參閱 CONTRIBUTING.md。
請將錯誤、建議和補丁發佈到 GitHub Issues。
請查看我們的安全政策,以了解負責任的揭露和安全錯誤報告流程。由於該庫的廣泛使用,我們強烈建議我們管理時間,以便在披露時提供可行的修補程式。非常感謝您在此事上的協助。
rackup
用於從命令列運行 Rack 應用程式的有用工具,包括用於腳本伺服器的Rackup::Server
(以前稱為Rack::Server
)。
rack-contrib
大量有用的中間件催生了對收集新鮮 Rack 中間件的項目的需求。 rack-contrib
包含各種 Rack 附加元件,可輕鬆貢獻新模組。
rack-session
為Rack提供便利的會話管理。
Rack 核心團隊包括
和機架校友
感謝:
Rack::Deflater
。Rack::ContentType
作者。Rack::Response
介面。Rack::Response
進行了改進。Rack 是根據 MIT 許可證發布的。