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

时间:2015-02-19 07:24:25

标签: ruby-on-rails rack

Rack(on 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会更漂亮,更优雅

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

看起来工作目录可能会被搞乱,具体取决于你的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