如何使用Heroku上的Ruby Rack设置静态站点的URL

Dav*_*ser 12 ruby static rack

我的网站在这里.

它曾经是一个Django支持的博客.但是我不再更新它,所以我只是想让它成为一个静态HTML站点.我想它并用Ruby Rack将它移动到Heroku.

但是,每个URL都会解析为主页.这是因为我的config.ru文件:

use Rack::Static, 
  :urls => ["/media/images", "/media/js", "/media/css"],
  :root => "public"

run lambda { |env|
  [
    200, 
    {
      'Content-Type'  => 'text/html', 
      'Cache-Control' => 'public, max-age=86400' 
    },
    File.open('public/index.html', File::RDONLY)
  ]
}
Run Code Online (Sandbox Code Playgroud)

问题:有没有办法映射多个URL?例如foo.com/about映射到public/about/index.html,foo.com/posts/2012/oct/21/blog-post映射到public/posts/2012/oct/21/blog-post/index.html

在这一点上,我甚至可以手动输入每一个.

谢谢你的帮助.

Dav*_*ser 19

现在我找到了最好的答案:

use Rack::Static, 
  :urls => ["/media/images", "/media/js", "/media/css"],
  :root => "public"

map "/" do
  run lambda { |env|
  [
    200, 
    {
      'Content-Type'  => 'text/html', 
      'Cache-Control' => 'public, max-age=86400' 
    },
    File.open('public/index.html', File::RDONLY)
  ]
}
end

map "/portfolio" do
  run lambda { |env|
  [
    200, 
    {
      'Content-Type'  => 'text/html', 
      'Cache-Control' => 'public, max-age=86400' 
    },
    File.open('public/portfolio/index.html', File::RDONLY)
  ]
}
end
Run Code Online (Sandbox Code Playgroud)

并将每个URL映射到其各自的文件.乏味,但有效.另请参阅有关URL变量的此问题的答案.但是无法让它为我工作.


Pat*_*ity 7

你为什么需要这个run陈述?也许这适合你:

use Rack::Static, 
  :urls => ["/media/images", "/media/js", "/media/css"],
  :root => "public",
  :index => "index.html",
  :header_rules => [
    [:all, {'Cache-Control' => 'public, max-age=86400'}]
  ]

run lambda{ |env| [ 404, { 'Content-Type'  => 'text/html' }, ['404 - page not found'] ] }
Run Code Online (Sandbox Code Playgroud)