我使用本指南为Heroku部署了一个静态网站:https://devcenter.heroku.com/articles/static-sites-ruby
我已经创建了这个文件夹结构:
- site
|- config.ru
|- Gemfile
|- public
|- index.html
|- images
|- js
|- css
|- subfolder
|- images
|- js
|- css
并将其写入config.ru
:
use Rack::Static,
:urls => ["/images", "/js", "/css"],
:root => "public"
use Rack::Static,
:urls => ["/images", "/js", "/css"],
:root => "public/subfolder"
run lambda { |env|
[
200,
{
'Content-Type' => 'text/html',
'Cache-Control' => 'public, max-age=86400'
},
File.open('public/index.html', File::RDONLY)
]
}
map '/subfolder' do
run Proc.new { |env|
[
200,
{
'Content-Type' => 'text/html',
'Cache-Control' => 'public, max-age=6400'
},
File.open('public/subfolder/index.html', File::RDONLY)
]
}
end
现在我希望domain.com
指向public/index.html
,domain.com/subfolder
指向public/subfolder/index.html
。目标网页似乎工作正常,我似乎无法向正确的目录提供请求(即正确的images
,js
和css
文件夹。
任何想法如何解决这个问题?谢谢!
答案 0 :(得分:1)
我认为问题在于您在分歧中使用路由:
use Rack::Static,
:urls => ["/images", "/js", "/css"],
:root => "public"
以上内容应该从/js/jquery-min.js
文件夹中提供public
。
use Rack::Static,
:urls => ["/images", "/js", "/css"],
:root => "public/subfolder"
现在,如果您尝试以相同的方式使用public/subfolder
,现在应该/js/jquery-min.js
提供public/subfolder/js/jquery-min.js
。哪个不一致。
相反,请尝试以下方法:
use Rack::Static, root: 'public',
urls: %w( /images /js /css /subfolder )
然后在您需要基本目录时使用/js/*
路由到资产,在需要子文件夹时使用/subfolder/js/*
,或者当您想要获取相同的脚本时只需js/*
html页面的目录级别。
如果有问题,请告诉我!