Ruby on rails 如何使用Rails 3.2.3下的Rack::Directory为目录提供服务

Ruby on rails 如何使用Rails 3.2.3下的Rack::Directory为目录提供服务,ruby-on-rails,rack,Ruby On Rails,Rack,我有一个Rails应用程序(版本3.2.3),我希望为一些故意不在公共目录中的静态文件提供服务。这个应用程序只是一个正在进行的工作,我只是用它来比较我在开发过程中的反应 我已经设置了以下使用Rails自动加载的迷你机架应用程序: APISchemaSampleServer = Proc.new do |env| Rack::Directory.new(Rails.root + "/spec/support/schema_definitions") end 在我的routes文件中,我安装了

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

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

APISchemaSampleServer = Proc.new do |env|
  Rack::Directory.new(Rails.root + "/spec/support/schema_definitions")
end
在我的routes文件中,我安装了small Rack应用程序:

mount APISchemaSampleServer, at: '/samples'
我位于
spec/support/schema_definitions
的目录是一个现有目录,其中有几个文件,我想在我的Rails应用程序中浏览
/samples
时提供这些文件

然而,当访问上面的路径时,我得到以下错误:

NoMethodError

undefined method `[]' for nil:NilClass
我一直在浏览,并尝试了几种不同的方法,但这似乎仍然不起作用


非常感谢您的帮助。提前谢谢。

发现了问题所在。我忘记调用
APISchemaSampleServer
中的
Rack::Directory
组件。正确的实现如下所示:

APISchemaSampleServer = Proc.new do |env|
  Rack::Directory.new('spec/support/schema_definitions').call(env)
end
(注意额外的
.call(env)
方法。)


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

找到了问题所在。我忘记调用
APISchemaSampleServer
中的
Rack::Directory
组件。正确的实现如下所示:

APISchemaSampleServer = Proc.new do |env|
  Rack::Directory.new('spec/support/schema_definitions').call(env)
end
(注意额外的
.call(env)
方法。)


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

对于在
development
env中显示Rails应用程序中的一些开发文档非常有用。谢谢在
development
env中的Rails应用程序中显示一些开发文档非常有用。谢谢