5

シンプルな静的ラック アプリを作成しています。以下の config.ru コードを確認してください。

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 を変数として保存し、次のような 1 つのマップ セクションを作成することで、これを簡素化したいと思います。

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

この url 変数を正しく設定するにはどうすればよいですか?

4

2 に答える 2

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
于 2012-11-05T03:31:51.633 に答える
4

マップ部分は必要ありません。

run Proc.new { |env|
  [
    200, 
    {
      'Content-Type'  => 'text/html', 
      'Cache-Control' => 'public, max-age=6400' 
    },
    File.open( 'archive' + env['PATH_INFO'], File::RDONLY)
  ]
}
于 2012-11-05T03:01:43.180 に答える