【问题标题】:Rails 3.2 redirecting /images/* to /assets/*Rails 3.2 将 /images/* 重定向到 /assets/*
【发布时间】: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


    【解决方案1】:

    试试:

    get '/images/:name.:ext', to: redirect('/assets/%{name}.%{ext}')
    

    【讨论】:

    • 但是如果图像文件名有一个'。'这仍然有效在其中(例如 company.logo.png)?可能会解决我的问题,但仍然看起来很笨拙。我想知道您是否可以在参数中包含任何类型的正则表达式?
    • 使用约束:constraints: { name: /.+/, ext: /(jpg|png|gif)/ }
    • 太棒了!这就是获胜的组合。再次感谢 NARKOZ!
    猜你喜欢
    • 2011-12-10
    • 2015-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多