Rack は、Ruby で Web アプリケーションを開発するための、最小限のモジュール式で適応性のあるインターフェイスを提供します。 HTTP リクエストとレスポンスを可能な限り単純な方法でラップすることにより、Web サーバー、Web フレームワーク、Web アプリケーション間のブリッジが単一のメソッド呼び出しに統合され、抽出されます。
これの正確な詳細はラック仕様に記載されており、すべてのラック アプリケーションはこれに準拠する必要があります。
バージョン | サポート |
---|---|
3.1.x | バグ修正とセキュリティパッチ。 |
3.0.x | セキュリティパッチのみ。 |
2.2.x | セキュリティパッチのみ。 |
<= 2.1.x | サポート終了。 |
詳細については、セキュリティ ポリシーを参照してください。
これはラックの最新バージョンです。バグ修正とセキュリティ パッチが含まれています。特定の変更の詳細については、変更ログを確認してください。
このバージョンのラックには重要な変更が含まれており、その詳細についてはアップグレード ガイドで説明されています。最新の機能とセキュリティ パッチを入手するには、できるだけ早く Rack 3 にアップグレードすることをお勧めします。
このバージョンの Rack はセキュリティ パッチのみを受信しているため、Rack 3 に移行するよう努力する必要があります。
Ruby 3.4 以降、 base64
依存関係はデフォルトの gem ではなくなり、 base64
が欠落しているという警告またはエラーが発生する可能性があります。これを修正するには、 base64
依存関係としてプロジェクトに追加します。
ラック 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 は、サポートされているサーバー ( WEBRick
、 Puma
、 Falcon
など) 上で Rack アプリケーションを実行するための汎用インターフェースである個別の gem であるrackup を提供します。
これらのフレームワークおよびその他の多くのフレームワークがラック仕様をサポートしています。
サーバーとフレームワークの間で、ラックはミドルウェアを使用してアプリケーションのニーズに合わせてカスタマイズできます。ラック自体には、次のミドルウェアが同梱されています。
Rack::CommonLogger
。Rack::ConditionalGet
、応答が変更されていない場合に Not Modified 応答を返します。Rack::Config
。Rack::ContentLength
本体サイズに基づいてcontent-length
ヘッダーを設定します。Rack::ContentType
は、応答のデフォルトのcontent-type
ヘッダーを設定します。Rack::Deflater
。Rack::ETag
は、バッファリングできるボディにetag
ヘッダーを設定します。Rack::Events
リクエストの受信時と応答の送信時に簡単なフックを提供します。Rack::Files
。Rack::Head
、HEAD リクエストに対して空のボディを返します。Rack::Lint
Rack 仕様への適合性を確認するためのものです。Rack::Lock
。Rack::MethodOverride
送信されたパラメーターに基づいてリクエスト メソッドを変更します。Rack::Recursive
は、アプリケーション内の他のパスからのデータを組み込み、内部リダイレクトを実行します。Rack::Reloader
。Rack::Runtime
、リクエストの処理にかかった時間を示すレスポンスヘッダーを含めます。Rack::Sendfile
ファイル システム パスに対して最適化されたファイル サービングを使用できる Web サーバーを操作するためのファイルです。Rack::ShowException
、ハンドルされない例外をキャッチし、クリック可能なバックトレースを使用してそれらを便利な方法で表示します。Rack::ShowStatus
、空のクライアント エラー応答に優れたエラー ページを使用します。Rack::Static
より構成可能な静的ファイルの提供を可能にします。Rack::TempfileReaper
リクエスト中に作成された一時ファイルを削除します。これらすべてのコンポーネントは同じインターフェイスを使用します。これについては、ラック仕様で詳しく説明されています。これらのオプションのコンポーネントは、任意の方法で使用できます。
既存のフレームワークの外で開発したり、独自のフレームワークを実装したり、ミドルウェアを開発したりする場合、Rack には、同じ Web 作業をすべて実行することなく、Rack アプリケーションを迅速に作成するための多くのヘルパーが用意されています。
Rack::Request
は、クエリ文字列の解析とマルチパート処理も提供します。Rack::Response
、HTTP 応答の生成と Cookie の処理に便利です。Rack::MockRequest
およびRack::MockResponse
。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 です。これは、1 つのリクエストで一度に 128 を超えるファイルをアップロードできないことを意味します。制限なしの場合は 0 に設定します。
RACK_MULTIPART_FILE_LIMIT
環境変数を介して設定することもできます。
(互換性のために、これはmultipart_part_limit
およびRACK_MULTIPART_PART_LIMIT
としてもエイリアスされます)
multipart_total_part_limit
ファイル フォーム フィールドとファイル以外のフォーム フィールドの両方を含む、リクエストに含めることができる任意のタイプのパーツの最大合計数。
デフォルトは 4096 です。これは、1 つのリクエストに 4096 を超える部分を含めることはできないことを意味します。
制限なしの場合は 0 に設定します。
RACK_MULTIPART_TOTAL_PART_LIMIT
環境変数を介して設定することもできます。
CHANGELOG.mdを参照してください。
Rack に貢献する方法の具体的な詳細については、CONTRIBUTING.md を参照してください。
バグ、提案、パッチを GitHub Issues に投稿してください。
責任ある開示とセキュリティ バグ報告プロセスについては、当社のセキュリティ ポリシーをご確認ください。ライブラリは広く使用されているため、公開時に実行可能なパッチを提供するためにタイミングを管理することが強く推奨されます。この件に関してご協力をよろしくお願いいたします。
rackup
サーバーのスクリプト作成用のRackup::Server
(以前のRack::Server
) など、Rack アプリケーションをコマンド ラインから実行するための便利なツールです。
rack-contrib
便利なミドルウェアが多数あるため、新しい Rack ミドルウェアを集めたプロジェクトの必要性が生じました。 rack-contrib
は、Rack 用のさまざまなアドオン コンポーネントが含まれており、新しいモジュールを簡単に提供できます。
rack-session
Rack に便利なセッション管理を提供します。
Rack Core チームは次のメンバーで構成されます。
そしてラックの同窓生
感謝したいと思います:
Rack::Deflater
について。Rack::ContentType
について。Rack::Response
インターフェイスを提案していただきました。Rack::Response
に関する改善について感謝します。Rack は MIT ライセンスに基づいてリリースされています。