【问题标题】:Rails3: Serve a file statically that is not in "public/"Rails3:静态提供不在“public/”中的文件
【发布时间】:2010-08-09 19:36:04
【问题描述】:

如果文件不在“public/”目录中(有充分理由),我如何使用正确的内容类型标头静态提供文件?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3


    【解决方案1】:

    Rails 有一个 send_file 方法可以做到这一点

    【讨论】:

    • 请记住,通过启动 rails 请求来提供静态文件是可行的,但会占用大量开销。
    • 是的,这显然是通过 Rails 堆栈运行所有内容,因此只有在必要时才这样做 - 例如,您需要基于动态身份验证进行下载。
    • 是的,我知道开销。但我想不出更好的方法来解决我的问题。我正在构建一个带有基于文件的模板系统的小型 CMS,每个模板都可以有自己的公共目录,因此要使用哪个公共目录取决于模板设置。我需要管理系统的普通公共目录。
    • 使用 XSendFile 避免在文件传输中加载 Rails 堆栈。
    • 你可以设置控制器动作来捕捉到`/public /template/:id/:filename'的路由。仅当路径指定的文件不存在时才会调用此操作,然后它可以生成文件并将其放置在那里。后续访问将直接命中资产。我个人使用它来动态生成图像缩略图。
    【解决方案2】:

    Rack::Static

    module MyApp
      class Application < Rails::Application
        config.middleware.use Rack::Static,
          :urls => [ '/my-secret-dir' ],
          :root => 'my/secret/dir'
      end
    end
    

    【讨论】:

    • 如果我想动态服务怎么办?
    • 然后按照 Gareth 的指示使用 send_file
    猜你喜欢
    • 1970-01-01
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    • 2012-06-15
    • 1970-01-01
    • 2018-10-23
    • 2021-07-08
    • 2013-06-02
    相关资源
    最近更新 更多