【问题标题】:How to serve directories using Rack::Directory under Rails 3.2.3如何在 Rails 3.2.3 下使用 Rack::Directory 服务目录
【发布时间】:2012-05-22 00:20:06
【问题描述】:

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

我设置了以下 mini Rack 应用程序,我正在使用 Rails 自动加载:

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

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

mount APISchemaSampleServer, at: '/samples'

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

访问上述路径时,出现以下错误:

NoMethodError

undefined method `[]' for nil:NilClass

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

非常感谢任何帮助。提前谢谢你。

【问题讨论】:

    标签: ruby-on-rails rack


    【解决方案1】:

    找出问题所在。我忘了在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 从当前 Rack 应用程序中查找路径。

    【讨论】:

    • 对于在 development 环境中的 Rails 应用程序中显示一些开发文档非常有用。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-04
    相关资源
    最近更新 更多