【问题标题】:Rails application returns 404 for images even after rake assets:precompile即使在 rake assets:precompile 之后,Rails 应用程序也会为图像返回 404
【发布时间】:2014-07-20 22:42:19
【问题描述】:

我在 Digital Ocean 上部署了 Rails 4 应用程序。一切顺利,但应用程序返回 404 的图像:

I, [2014-07-20T22:28:00.693171 #7751]  INFO -- : Started GET "/assets/left.png" for 128.73.51.11 at 2014-07-20 22:28:00 +0000
F, [2014-07-20T22:28:00.695271 #7751] FATAL -- : 
ActionController::RoutingError (No route matches [GET] "/assets/left.png"):
  vendor/bundle/ruby/2.0.0/gems/actionpack-4.1.0/lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call'

经过一番谷歌搜索后,我发现了这个this,据说我可以使用config.serve_static_assets = truerake assets:precompile。我都试过了,但仍然有 404 的字体和图像(CSS 和 JS)都可以。

有人可以帮忙吗?

【问题讨论】:

  • 您如何包含图像,使用 html 或使用 image_pathimage_tag 助手?
  • 请在图片调用中附加视图代码。

标签: ruby-on-rails asset-pipeline


【解决方案1】:

这可能无法直接解决您的问题 - 它更多的是澄清可能出了什么问题:)


指纹识别

在不正确了解您的应用设置的情况下,这只是需要考虑的问题,但此特定问题的主要原因是 asset fingerprinting 的想法

指纹基本上是 Rails 获取资产文件的地方,将它们编译成单个文件(通常为 application.css / application.js),并允许您根据需要引用这些文件。 p>

这里的问题是,如果您提供已被指纹识别的静态资产,您将无法再将它们作为 CSS/JS 中的“静态”资产引用。您必须使用动态引用


路径

动态引用基本上是您使用 asset_path 之类的东西的地方 - 它允许您根据需要引用路径,而不管它们的文件名是什么

通常,您会像这样设置 CSS:

#app/stylesheets/application.css
body {
   background: url("your/image.png");
}

这里的问题是这将直接引用图像,并且无法使用所需的动态指纹路径。要解决此问题,您需要使用 Rails CSS pre-processors (SASS & SCSS) 之一:

#app/assets/stylesheets/application.css.scss
body {
    background: asset_url("your/image.png"); /* Notice the path helper? */
}

动态引用的文件名/路径问题将是您的应用程序可能面临的问题之一。在没有看到您如何引用图像的情况下,我只能推测 - 但我建议您查看您正在使用的路径/资产助手

【讨论】:

    猜你喜欢
    • 2011-07-16
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-13
    • 1970-01-01
    相关资源
    最近更新 更多