2

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

{appname}/public/images/unconventional.gif

しかし、代わりにここに:

{appname}/unconventional.gif

これは Rails の規則に完全に違反していることは理解しています。不道徳であり、いかなる状況下でもこれを行うべきではありません。さらに、なぜそのような愚かなことを提案するのでしょうか?

さて、私が Windows を使用していてシンボリック リンクが問題外であると仮定すると、それを邪魔にならないようになりました。

4

1 に答える 1

6

Rails はこれらの画像を提供しません。Web サーバーに任せます。このシナリオを処理するには、Web サーバーの構成を変更することをお勧めします。たとえば、を使用する場合Apache、 で設定するのはかなり簡単mod_rewriteです。

Rails にこれらの画像を提供させるのは見苦しいですが、一致する にルートを指定し、ファイル自体が存在しない場合は可能です。例えば:routes.rb/public/images/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]たとえば、 を使用)、入力を完全にサニタイズする必要があることに注意してください。外の世界。

于 2009-06-22T21:39:16.023 に答える