【发布时间】:2013-12-24 03:54:10
【问题描述】:
我们已将公司网站从基于静态的系统升级到 Ruby on Rails v3.2。
不幸的是,我们仍然有大量请求涌入“/image/company-logo.png”(和其他)的热链接静态图像,但这些请求失败了:
Started GET "/images/company-logo.png" for xxx.xxx.xxx.xxx at 2013-12-06 17:07:08 +0000
ActionController::RoutingError (No route matches [GET] "/images/company-logo.png"):
问题是这些请求正在填满我的日志(我每小时收到数百个)。
很简单;我需要一种方法将“/images”的任何内容重定向到 Heroku 上的“/assets”
我尝试过的:
get '/images', to: redirect('/assets')
(似乎被忽略了,或者至少没有效果)
get '/images/:name', to: redirect('/assets/%{name}')
(重定向到/assets,但去掉“.png”,因此再次失败。可能还有其他图像文件/格式,所以我无法有效地硬编码“.png”)
这似乎是一个相当普遍的问题,但我在互联网上找不到任何解决方案。
更新
好的,我已通过将静态图像放在 public/images 文件夹中解决了这个问题。我在其他地方看到这可能是一个“坏主意”,因为 Heroku 处理多个测功机上的静态文件的方式,但它似乎工作(可能是因为图像在 git repo 中,而不是事后添加)。
我仍然很想听听任何其他像这样大规模重定向资产的解决方案,因为我不喜欢将任何东西放在 /public 中,而且它可能对那些不能使用 /public 的人有用(对于各种原因)。
~SOLUTION~ (从下面 NARKOZ 的回答中总结为一行)
get '/images/:name.:ext', to: redirect('/assets/%{name}.%{ext}'), constraints: { name: /.+/, ext: /(jpg|png|gif)/ }
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 heroku asset-pipeline