如何正确地将domain.com/subfolder指向Ruby with Rack中的静态网站?

时间:2013-02-14 22:30:52

标签: ruby static config rack

我使用本指南为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.htmldomain.com/subfolder指向public/subfolder/index.html。目标网页似乎工作正常,我似乎无法向正确的目录提供请求(即正确的imagesjscss文件夹。

任何想法如何解决这个问题?谢谢!

1 个答案:

答案 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页面的目录级别。

如果有问题,请告诉我!