机架中间件从子模块提供静态文件夹

Rack middleware serve static folders from submodule

机架(rails)问题:

鉴于我正在将一个子模块加载到我的 Rails 应用程序中, 我想从子模块的 {folder_a, folder_b}

提供静态文件

我无法将子模块的文件夹移动到 /public,因为我只想要 提供子模块中的一些文件(而不是全部)

我如何配置 Rack 来做到这一点?

我的结构如下所示:

config.ru
submodule/public/folder_a/
submodule/public/folder_b/
public/

我想要下面的映射

submodule/public/folder_a => http://localhost:3000/folder_a
submodule/public/folder_b => http://localhost:3000/folder_b

到目前为止我尝试了什么:

use Rack::Static, :urls => ["/folder_a", "folder_b"], :root => "submodule/public"

那没有用,我的服务器 /folder_a 上没有响应。这个想法部分来自(旧)问题 How to serve static files via Rack?,但它似乎暗示了失败的旧解决方案(目前我的项目正在使用 Rack 1.5.2)。

我还尝试将我想要的文件夹符号链接到 /public,这很有效。 但是我相信直接使用Rack会更漂亮更优雅

有什么建议吗?

根据您的 Rails 应用程序的启动方式,工作目录可能会被弄乱。

我在 Rails 应用程序中使用了以下 config.ru:

# This file is used by Rack-based servers to start the application.

use Rack::Static, :urls => ["/folder_a", "/folder_b"], :root => ::File.expand_path("submodule/public")

require ::File.expand_path('../config/environment', __FILE__)
run Rails.application

然后在终端中:

$ rails server -d
=> Booting WEBrick
=> Rails 4.2.0 application starting in development on http://localhost:3000
=> Run `rails server -h` for more startup options

$ curl http://0.0.0.0:3000/folder_a/index.html
A

$ curl http://0.0.0.0:3000/folder_b/index.html
B