Ruby Rack Heroku:提供静态文件

我遵循Heroku指南使用Ruby Rack( https://devcenter.heroku.com/articles/static-sites-ruby )部署静态文件,但除了index.html之外,我无法访问\public任何HTML文件。 也就是说, localhost:9292/test.html仍然映射到index.html 。 (我的所有样式和js文件都正确提供)。

下面是我的config.ru文件。 我知道什么是错的,但不确定有效的解决方案?

 use Rack::Static, :urls => ["/images", "/js", "/css"], :root => "public" run lambda { |env| [ 200, { 'Content-Type' => 'text/html', 'Cache-Control' => 'public, max-age=86400' }, File.open('public/index.html', File::RDONLY) ] } 

对于您的config.ru文件,请尝试:

 use Rack::Static, :urls => ["/images", "/js", "/css"], :root => "public" run Rack::File.new("public") 

您还可以使用run Rack::Directory.new("public")替换最后一行,它将提供所有文件,但如果有人转到目录的URL(如根目录run Rack::Directory.new("public") ,则会提供类似接口的文件浏览器)

我没有Ruby经验,我发现这个样板项目在尝试将静态网站部署到Heroku时很有用:

Heroku的静态站点

特别是,请确保除config.ru之外还有GemfileGemfile.lock文件。

作者的项目结构托管根目录中的所有内容,但您可以轻松地将所有内容移动到public/并更正为@looby建议的config.ru