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

标签 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.html 并且 domain.com/subfolder 指向 公共(public)/子文件夹/index.html。着陆页似乎工作正常,我似乎无法将他们的请求提供给正确的目录(即正确的 imagesjscss 文件夹)。

有什么解决办法吗?谢谢!

最佳答案

我认为问题在于您不同意使用路由:

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

例如,上面应该从 public 文件夹提供 /js/jquery-min.js

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/* 路由到 Assets ,在需要子文件夹时使用 /subfolder/js/* 路由到 Assets ,或者只是 js/* 当你想获取 html 页面相同目录级别的脚本时。

让我知道是否解决了问题!

关于ruby - 如何正确地将 domain.com/subfolder 指向 Ruby with Rack 中的静态网站?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14885283/

相关文章:

C# 如何从另一个类访问静态类 List<>

c++ - static 和 const 变量有什么区别?

c# - 打开/关闭应用程序的功能

c++ - 我可以在同一进程中运行多个 Ruby 解释器实例吗?

ruby - 什么是包装器(在 Ruby API 中)

ruby - Rails Foxy Fixtures 抛出未知列错误

mysql - 我的 has_and_belongs_to_many 关系有什么问题?

c# - 静态属性的默认值

c++ - 全局配置的最佳实践

javascript - grunt-contrib-connect 忽略任务选项