【问题标题】:Rails 4 public 404/500 error pages are requesting image resources with bad pathsRails 4 公共 404/500 错误页面正在请求路径错误的图像资源
【发布时间】:2015-11-15 13:10:19
【问题描述】:

我在我的应用程序的公共文件夹中构建了一些错误页面(404、500 等)。我知道这些都在资产管道之外,所以我将它们构建为一个独立的 html 文件,头部带有 CSS。

这些错误页面有几个图像(背景和徽标)。两者都以通常的方式加载(不使用任何 Rails 助手):

<img src="Checklick-Logo-White-Transparent.png" alt="Checklick Logo" style="width: 100%">

background: url("Checklick-Cloud-Background-High.jpg") no-repeat center top;

在生产中,当我尝试加载这些页面 (app.checklick.com/500.html) 时,它们加载得很好。

但是,当我在应用程序上收到 实际错误,并且加载了相同的错误页面时,出于某种原因,图像路径会附加一个控制器名称(即它们变为 @987654324 @)。然后控制器尝试使用该图像文件名作为参数执行操作,这会导致另一个错误。当然,浏览器不能渲染任何一个图像,所以错误页面本身看起来很糟糕。

知道在实际错误期间如何/为什么将控制器名称添加到图像请求中吗?

【问题讨论】:

  • 我建议您使用浏览器调试控制台比较两种情况下呈现的 html(使用 500.html url 直接输入,并通过您的应用程序生成 500 错误)。在真正的 500 服务器错误情况下,Rails 操作控制器没有主动路由 (guides.rubyonrails.org/…)

标签: html css ruby-on-rails model-view-controller asset-pipeline


【解决方案1】:

事实证明,所有错误在于我没有使用相对于根目录的路径来访问我的公共 404/500 html 页面上的图像。

我变了

<img src="Checklick-Logo-White-Transparent.png" alt="Checklick Logo" style="width: 100%">

<img src="/Checklick-Logo-White-Transparent.png" alt="Checklick Logo" style="width: 100%">

改变了

background: url("Checklick-Cloud-Background-High.jpg") no-repeat center top;

background: url("/Checklick-Cloud-Background-High.jpg") no-repeat center top;

现在,无论我的错误页面的来源是什么,图像都可以正常加载。例如,我可以加载 app.checklick.com/500 或 app.checklick.com/programs/500 并且仍然可以加载图像。

【讨论】:

    【解决方案2】:

    图像应位于app/assets/images 目录中。

    在公共页面中,您可以写路径 -

    <img src="/assets/Checklick-Logo-White-Transparent.png" alt="Checklick Logo" style="width: 100%">
    

    【讨论】:

    • 图像是否应该在 /app/assets/images 目录中,即使它们是在资产管道之外提供的(如我的示例 - 错误页面)?
    猜你喜欢
    • 1970-01-01
    • 2017-02-08
    • 2013-02-04
    • 2021-11-25
    • 1970-01-01
    • 1970-01-01
    • 2017-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多