従来のディレクトリの場所にないメディアリソースにアクセスするようにRailsを構成する方法は?
-
06-07-2019 - |
質問
通常の場所にない画像があるとしましょう:
{appname}/public/images/unconventional.gif
代わりにここに:
{appname}/unconventional.gif
これはRailsの規約に完全に違反するものであり、不道徳であり、いかなる状況でもこれを行うべきではないことを理解しています。さらに、なぜこのような愚かなことを提案するのでしょうか?
OK、これで私はWindowsを使用しているため、シンボリックリンクは問題にならないので、これを設定する方法はありますか?
解決
Railsはこれらの画像を提供せず、Webサーバーに提供させます。このシナリオを処理するには、Webサーバーの構成を変更するのが最善でした。たとえば、 Apache
を使用する場合、 mod_rewrite
を使用して設定するのはかなり簡単です。
Railsでこれらの画像を提供するのはいですが、 / public / images /に一致するルートを
、およびファイル自体が存在しない場合。例: routes.rb
に指定すると 可能ですunconventional.gif
map.connect "public/images/unconventional.gif",
:controller => "static_image_controller",
:action => "serve"
そしてコントローラー StaticImageController
を作成します:
class StaticImageController < ApplicationController
def serve
image = File.read(File.join(Rails.root, "unconventional.gif"))
send_data image, :type => "image/gif", :disposition => "inline"
end
end
警告:上記の概念を使用する場合、URLからの入力を使用して、提供するファイルを決定する場合( params [:file]
で、例)、ファイルシステム全体を外部に公開するリスクがあるため、入力を徹底的にサニタイズする必要があります。
所属していません StackOverflow