如何防止资产管道与我的/.../.../.../images URL冲突?

时间:2012-11-27 00:20:33

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

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

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

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

1 个答案:

答案 0 :(得分:0)

解决。我们的{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>

这样只有当这个词实际上是路径中的第一个东西时它才会匹配。