2012-11-05 6 views
5

私は単純な静的なRackアプリケーションを書いています。Rack:どのようにURLを変数として保存しますか?

use Rack::Static, 
    :urls => ["/elements", "/img", "/pages", "/users", "/css", "/js"], 
    :root => "archive" 


map '/' do 
    run Proc.new { |env| 
    [ 
     200, 
     { 
     'Content-Type' => 'text/html', 
     'Cache-Control' => 'public, max-age=6400' 
     }, 
     File.open('archive/splash.html', File::RDONLY) 
    ] 
    } 
end 

map '/pages/search.html' do 
    run Proc.new { |env| 
    [ 
     200, 
     { 
     'Content-Type' => 'text/html', 
     'Cache-Control' => 'public, max-age=6400' 
     }, 
     File.open('archive/pages/search.html', File::RDONLY) 
    ] 
    } 
end 

map '/pages/user.html' do 
    run Proc.new { |env| 
    [ 
     200, 
     { 
     'Content-Type' => 'text/html', 
     'Cache-Control' => 'public, max-age=6400' 
     }, 
     File.open('archive/pages/user.html', File::RDONLY) 
    ] 
    } 
end 

# Each map section is repeated for each HTML page served 

は、私が変数としてURLを格納し、私が正しく、このURLを設定するにはどうすればよい

map url do 
    run Proc.new { |env| 
    [ 
     200, 
     { 
     'Content-Type' => 'text/html', 
     'Cache-Control' => 'public, max-age=6400' 
     }, 
     File.open('archive' + url, File::RDONLY) 
    ] 
    } 
end 

を言う1つのマップのセクションを作成することによって、これを簡素化したいと思います:以下config.ruコードをチェックアウト変数?

答えて

4

地図部分は必要ありません。

についてどのように
run Proc.new { |env| 
    [ 
    200, 
    { 
     'Content-Type' => 'text/html', 
     'Cache-Control' => 'public, max-age=6400' 
    }, 
    File.open('archive' + env['PATH_INFO'], File::RDONLY) 
    ] 
} 
+0

作品、これは、それが見つけたものは何でもファイルのコンテンツタイプには「text/htmlの」を設定しても「robots.txtの」または 'になることを感謝 –

+0

ノートfavicon.ico '。しかし、私はあなたがいつもその行を残して、ブラウザが推測できると思います。 – rbp

5

static_page_mappings = { 
    '/'     => 'archive/splash.html', 
    '/pages/search.html' => 'archive/pages/search.html' 
    '/pages/user.html' => 'archive/pages/user.html', 
} 

static_page_mappings.each do |req, file| 
    map req do 
    run Proc.new { |env| 
     [ 
     200, 
     { 
      'Content-Type' => 'text/html', 
      'Cache-Control' => 'public, max-age=6400', 
     }, 
     File.open(file, File::RDONLY) 
     ] 
    } 
    end 
end 
+0

その提案を試していないが、うまくいくかもしれない、ありがとう! –

+0

エリックの記事で私のコメントを見て、コンテンツタイプ – rbp

関連する問題