0

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

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

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

4

1 回答 1

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 路径与 regex 匹配,这就会关闭乘客(因此阻止 Rails 收到请求)/\/(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>

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

于 2012-11-27T22:56:54.697 回答