【问题标题】:How can I prevent the asset pipeline from conflicting with my /.../.../.../images URL?如何防止资产管道与我的 /.../.../.../images URL 冲突?
【发布时间】:2012-11-27 00:20:32
【问题描述】:

我有一个由 Rails 提供的 REST API,它有一个路径 /api/blah/blah/images.json,它提供有关图像的信息,它是图像模型的一个实例。在开发中,这很好用;在我们创建的沙盒环境中,这会导致 apache 错误(路径永远不会与 routes.rb 匹配,并且 rails 日志根本没有记录请求)。

我们进行了测试,发现这个问题恰好出现在那些包含子字符串“/images”、“/javascripts”或“/stylesheets”的 URL 上,因此我们怀疑 rails 资产管道以某种方式拦截了这些 URL(然后在该路径上找不到任何图像,并给出错误)。

如何配置哪些 URL 被视为资产,哪些根据 routes.rb 传递给控制器​​?

【问题讨论】:

    标签: ruby-on-rails url-rewriting asset-pipeline


    【解决方案1】:

    解决了。我们的 {environment}.include apache conf 文件中有以下几行:

    # Turn passenger off for directories w/ just static content and
    # allow auto indexing.
    <Location ~ /(stylesheets|javascripts|images|snapshots|fonts)>
      PassengerEnabled off
      FileETag None
      # Options -Indexes
    </Location>
    

    只要 url 路径与正则表达式 /\/(stylesheets|javascripts|images|snapshots|fonts)/ 匹配,就会关闭乘客(因此阻止 Rails 收到请求)。这是一个非常过分热心的正则表达式 - 在我们的例子中,它应该只在路径以这些名称之一开头时才匹配,所以我们将其更改为

    # Turn passenger off for directories w/ just static content and
    # allow auto indexing.
    <Location ~ ^/(stylesheets|javascripts|images|snapshots|fonts)/>
      PassengerEnabled off
      FileETag None
      # Options -Indexes
    </Location>
    

    这样它只会在该单词实际上是路径中的第一件事时匹配。

    【讨论】:

      猜你喜欢
      • 2011-01-08
      • 2013-05-19
      • 2012-03-04
      • 1970-01-01
      • 1970-01-01
      • 2022-07-08
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      相关资源
      最近更新 更多