私が必要とするものを説明しようとしましょう。RubyとPumaを使用して他のリクエストによって生成されたリクエストを検出するにはどうすればよいですか?
ブートストラップのようなライブラリをHTMLページに挿入してこのページを読み込むと、ライブラリのメインファイルも読み込まれます。ほとんどの場合、ライブラリファイルには他のファイルが必要です。 Bootstrapを例として使用したので、glyphicons-halflings-regular.svg
、glyphicons-halflings-regular.ttf
、glyphicons-halflings-regular.woff
、およびglyphicons-halflings-regular.woff2
をすべてBootstrapの一部として考えてみましょう。
私はアプリケーションからのリクエストに対処するためにラックミドルウェアを書いています。このミドルウェアのタスクの1つは、特定の規則に従って要求を変更することです。例えば、自分のアプリケーションにブートストラップは、このパス
ENV['HOME']/my_app/web/libraries/bootstrap/
に位置するであろうし、その主なCSSファイルは、
ENV['HOME']/my_app/web/libraries/bootstrap/css/bootstrap.css
だろうそしてロードされたとき、それはすべてのこれらのファイルの新しい要求を生成するI上記の通り。
私が必要とするのは、特定のファイル(例:glyphicons-halflings-regular.svg
)が別のファイルで必要とされていることです。そのため、私のRackミドルウェアを使用してその場所を変更することがあります。 Like:
Requested file:
`glyphicons-halflings-regular.svg`
Requested-by:
http://my_app_domain.com/web/libraries/bootstrap/css/bootstrap.css
Request address:
http://my_domain_app.com/web/libraries/bootstrap/css/../fonts/glyphicons-halflings-regular.svg
私は新しいリクエストごとにスレッドを開始しようとしていますが、次に、メインファイルのアドレスをベースアドレスとみなして、そのファイルによって生成されたすべてのサブリクエストにそのアドレスを付加します。
私はこれについてあなたの考えを聞きたいです。同じことをするためのより良い方法の提案?
EDIT:(spickermannの質問)
いいえ、これはポイントではありません。たぶん私ははっきりしていなかったかもしれません。
は、次のような構造を考えてみましょう:
ENV['HOME']/my_app/web/libraries/library1/
| |
| |_ a_css_file.css
| |_ a_jpeg_file.jpg
|
/library2/
|
|_ another_css_file.css
|_ a_jpeg_file.jpg
はのは、私のミドルウェアがa_jpeg_file.jpg
という名前のファイルに対する要求を受信すると仮定しましょう。同じ名前の2つのファイルがあります.1つはlibrary1
、もう1つはlibrary2
です。
a_jpeg_file.jpg
が必要な場合は、a_css_file.css
またはanother_css_file.css
のいずれかのファイルを判断する唯一の方法です。
最初のケースでは、library1
へのパスをファイルに追加して、ENV['HOME']/my_app/web/libraries/library1/
を提供します。それ以外の場合は、パスをlibrary2
の前に置き、ENV['HOME']/my_app/web/libraries/library2/
とします。
どちらのファイルでも、どのファイルがa_jpeg_file.jpg
のリクエストを生成したのかを知る必要があります。
つまり、特定のファイルが必要なライブラリコンテキストを知る必要があります。
また、あなたの 'view_folders'配列に" my_app/web/libraries/bootstrap/css "を追加することもできます。次に、ファイルが要求されると、各ビューフォルダを歩き、そこにこのファイルがあるかどうかを確認します。存在する場合は、検索を停止して配信します。 –
しかしまず、REFERER httpヘッダーをチェックしてください。それはあなたが必要とするものを含んでいるかもしれませんが(私はそれがページのURLを含んでいます) –
さて、@ SergioTulentsev。しかし、ブートストラップはほんの一例であった。私のミドルウェアは、私が私のアプリで使っているライブラリにこれを行うことができなければなりません。 –