我们已将公司网站从基于静态的系统升级到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"):
问题是这些请求正在填写我的日志(我每小时得到数百个)。
简单地;我需要一种方法在Heroku上将'/ images'的任何内容重定向到'/ assets'
我尝试了什么:
get '/images', to: redirect('/assets')
(似乎被忽略,或者至少没有效果)
get '/images/:name', to: redirect('/assets/%{name}')
(重定向到/ assets,但剥离'.png',然后再次失败。可能还有其他图像文件/格式,所以我无法有效地硬编码'.png')
这似乎是一个相当普遍的问题,但我无法在互联网上找到任何解决方案。
更新
好的,我已经通过将静态图像放在public / images文件夹中解决了这个问题。我在其他地方看到这可能是一个“坏主意”,因为Heroku处理多个dynos上的静态文件的方式,但它似乎工作(可能是因为图像是在git repo中而不是在事后添加)。
我仍然希望听到任何其他大规模重定向此类资产的解决方案,因为我不喜欢将任何内容放入/公开,此外它可能对那些不能使用/公共的人有用(对于各种原因)。
〜解决方案〜 (摘自以下NARKOZ答案中的一行)
get '/images/:name.:ext', to: redirect('/assets/%{name}.%{ext}'), constraints: { name: /.+/, ext: /(jpg|png|gif)/ }
答案 0 :(得分:3)
尝试:
get '/images/:name.:ext', to: redirect('/assets/%{name}.%{ext}')