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

我的网站在这里 。

它曾经是一个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) ] } 

问题:有没有办法映射多个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映射到public/posts/2012/oct/21/blog-post/index.html

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

谢谢你的帮助。

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

 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 

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

你为什么需要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'] ] }