我有一个由Rails提供的REST API,它有一个路径/api/blah/blah/images.json,它提供有关图像的信息,图像是Image模型的一个实例。在开发中,这很好用;在我们创建的沙箱环境中,这会产生apache错误(路径永远不会与routes.rb匹配,并且rails日志根本不会记录请求)。
我们玩过,发现这个问题恰好出现在那些包含子字符串“/ images”,“/ javascripts”或“/ stylesheets”的URL中,所以我们怀疑rails资产管道以某种方式拦截这些URL(然后在该路径上找不到任何图像,并给出错误。)
如何根据routes.rb配置哪些URL被视为资产以及哪些URL传递给控制器?
答案 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>
这样只有当这个词实际上是路径中的第一个东西时它才会匹配。