我在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 = true
或rake assets:precompile
。我尝试了两种,但仍然有404字体和图像(CSS和JS)都没问题。
任何人都可以帮忙吗?
答案 0 :(得分:3)
这可能无法直接解决您的问题 - 这更能说明可能出错的原因:)
<强>指纹强>
在不知道您的应用设置正确的情况下,这只是需要考虑的因素,但这个特定问题的主要原因是asset fingerprinting
指纹识别基本上是Rails将获取资产文件,将其编译为单个文件(通常为application.css
/ application.js
),并允许您引用这些文件的位置愿望。
这里的问题是,如果您正在提供已经指纹识别的静态资产,您将无法再将它们作为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? */
}
动态引用的文件名/路径问题将是您应用程序可能遇到的问题之一。在没有看到你如何引用图像的情况下,我只能推测 - 但我建议你看看你正在使用哪些路径/资产助手