従来のディレクトリの場所にないメディアリソースにアクセスするようにRailsを構成する方法は?

StackOverflow https://stackoverflow.com/questions/1029442

質問

通常の場所にない画像があるとしましょう:

{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] で、例)、ファイルシステム全体を外部に公開するリスクがあるため、入力を徹底的にサニタイズする必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top