web-dev-qa-db-ja.com

ラックを介して静的ファイルを提供する方法は?

現在、ラックベースのアプリケーションを開発しており、すべてのファイル要求(filename.filetypeなど)を指定されたフォルダーにリダイレクトしたいと考えています。

Rack :: Staticは、特別なフォルダ( "/ media"など)のファイルリクエストのみをサポートします。

独自のRackミドルウェアを作成する必要がありますか、それともすぐに使用できるソリューションが存在しますか?

宜しくお願いします

39
brainfck

すべてのリクエストを特定のパスにリダイレクトするには、 Rack::File (何らかの理由で、このクラスは最近のドキュメントにはありませんが、 まだ一部 最新のラックです):

run Rack::File.new("/my/path")

すべてのリクエストをリダイレクトし、ターゲットディレクトリ内のすべてのファイルのHTMLインデックスを追加するには、 Rack::Directory

run Rack::Directory.new("/my/path")

複数のディレクトリを結合するか、ターゲットディレクトリからの一部のリクエストのみを処理するには:

map "/url/prefix" do
  run Rack::File.new("/my/path")
end

# More calls to map if necessary...

# All other requests.
run MyApp.new
39
molf

更新、最新のRack実装では、使用できます Rack :: Static

例:

use Rack::Static, :urls => ["/media"]

./mediaの場所に関連するconfig.ruフォルダーの下のすべての静的リソースを提供します。

11

Rack::Fileを直接使用できる場合があります。ラックアップに接続して機能することを確認できるconfig.ruファイルを次に示します。

app = proc do |env|
  Rack::File.new('foo/bar').call(env)
end

run app
10
kejadlen
run Rack::Directory.new(Dir.pwd)
2
Diego Carrion