1

我有一个 Rails 应用程序(版本 3.2.3),我想提供一些有意不在公共目录中的静态文件。这个应用程序只是一个正在进行的工作,我只是用它来比较我在开发过程中的反应。

我已经设置了以下使用 Rails 自动加载的迷你 Rack 应用程序:

APISchemaSampleServer = Proc.new do |env|
  Rack::Directory.new(Rails.root + "/spec/support/schema_definitions")
end

在我的路由文件中,我安装了小型 Rack 应用程序:

mount APISchemaSampleServer, at: '/samples'

我的目录是一个现有目录,其中包含我在 Rails 应用程序中spec/support/schema_definitions浏览时想要提供的几个文件。/samples

但是,当访问上面的路径时,我收到以下错误:

NoMethodError

undefined method `[]' for nil:NilClass

我一直在浏览Rack::Directory 文档并尝试了几种不同的方法,但这似乎仍然不起作用。

任何帮助是极大的赞赏。先感谢您。

4

1 回答 1

4

找出问题所在。我忘记Rack::DirectoryAPISchemaSampleServer. 正确的实现如下所示:

APISchemaSampleServer = Proc.new do |env|
  Rack::Directory.new('spec/support/schema_definitions').call(env)
end

(注意额外的.call(env)方法。)

Rack::Directory此外,还可以删除构造函数参数中的 Rails.root 前缀,因为它Rack::Directory会从当前 Rack 应用程序中查找路径。

于 2012-05-22T10:27:58.310 回答