Ruby on rails 机架中间件为子模块中的静态文件夹提供服务

Ruby on rails 机架中间件为子模块中的静态文件夹提供服务,ruby-on-rails,rack,Ruby On Rails,Rack,机架(导轨上)问题: 鉴于我正在将一个子模块加载到Rails应用程序中, 我想从子模块的{folder_a,folder_b} 我无法将子模块的文件夹移动到/public,因为我只需要 为子模块中的部分文件(而不是全部)提供服务 如何配置机架以实现此目的 我的结构如下所示: config.ru submodule/public/folder_a/ submodule/public/folder_b/ public/ 我想要下面的映射 submodule/public/folder_a =>

机架(导轨上)问题:

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

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

如何配置机架以实现此目的

我的结构如下所示:

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\u a
没有响应。这个想法部分来自于(旧的)问题,但它似乎暗示旧的解决方案失败了(目前我的项目使用的是Rack 1.5.2)

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


有什么建议吗?

根据Rails应用程序的启动方式,工作目录可能会出现问题

我使用以下config.ru在Rails应用程序中运行它:

# 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

无法提供完整的帮助,但我想我记得为此使用了
Rack::Directory
。你看了吗?@BenjaminSinclaire,是的,我找到了一个例子,但结果证明它过时了。无法让它工作。是否使用
Rack::Directory失败。新的
不存在??看起来不错,但看起来很奇怪,尽管您必须执行File.expand\u路径。与我的(失败)示例的主要区别是:
“/folder\u a”