2012-11-27 32 views
0

我有一个由Rails提供的REST API,它有一个路径/api/blah/blah/images.json,它提供了有关图像的信息,这是图像模型的一个实例。在开发中,这工作正常;在我们创建的沙箱环境中,这会产生apache错误(路径永远不会与routes.rb匹配,并且rails日志根本不记录请求)。如何防止资产管道与我的/.../.../.../images URL冲突?

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

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

回答

0

已解决。我们在我们的{}环境.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)/。这是一个非常过分热心的正则表达式 - 在我们的情况下,它应该只当路径与这些名字中的一个开始匹配,所以我们把它改成

# 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> 

,这样,当这个词实际上是将只匹配第一件事在路上。