ActionController::RoutingError (没有匹配路由 [GET] "/assets/images/control_top.png"):在Rails 3.2.8中。

22
在我的页面中没有上传背景图片,显示这个错误信息。
ActionController::RoutingError(没有匹配的路由[GET]“/assets/images/control_top.png”)
我该怎么做来解决这个问题?
5个回答

27

在生产环境中,Rails不会负责提供静态资源文件。因此,您会遇到这个错误。

这是由应用程序中config/environment/production.rb中的此设置控制的:

config.serve_static_assets = false

你可以将其设置为true

或者尝试这个

rake assets:precompile 

command(编译并将图像、CSS和JS从app/assets复制到public/)。


1
请注意*,您应该确保将此设置在生产环境中,而不是application.rb文件中。这个问题让我头疼了好几个小时。 - Kevin Brown
3
在Rails 4中,config.serve_static_files用于配置是否由应用程序提供静态文件服务。 - rendon
1
在Rails 5中,config.public_file_server.enabled = true用于开启公共文件服务器。建议仅在development.rb中使用,而不是production.rb中使用,因为Web服务器(例如Apache、Nginx)应该在生产环境中提供资产服务。 - CFitz
config.assets.enabled = true 也很重要。 - Christiano Matos

25
如果你升级到Rails的新版本(比如Rails 4和Rails 3.2.16),并且你突然看到这个错误,那么很可能是你的样式表指向了非指纹化、非缓存版本的文件。如果你正在使用资产管道,为了利用它,您需要使用新的助手指向带指纹、已缓存的文件。要做到这一点,您需要在 CSS 文件中嵌入 erb 或使用 Sass。
不正确(使用 Sass):
.class
  background: url('asset.png') no-repeat

正确写法(使用Sass):

.class
  background: image-url('asset.png') no-repeat

更多信息,请参见此处:http://guides.rubyonrails.org/asset_pipeline.html#coding-links-to-assets


2
升级到Rails 3.2.16后,这个问题困扰了我,所以不仅限于4.x版本。 - Mark Berry
1
@MarkBerry 感谢您的参与。我会更新我的答案,包括那个版本。 - Aaron Gray
1
根据文档,也可以使用asset-url('yourimage.png'),因此似乎“image”添加并没有功能上的作用——只是一种由语法调整者强制施加的命名约定更改。当然,我可以在我工作的所有项目中的数千行CSS上运行awk脚本,但这可能会在某些意想不到的情况下失败并破坏事物。有人知道一个gem,可以恢复此类语法幻想更改的原始功能吗? - JosephK

7

这可能会对某些人有所帮助,我尝试了所有的答案,但忘记了做最基本的事情。清除浏览器缓存,一旦完成,就可以顺利进行 :)


为什么这是必须的?你的建议非常准确,但我觉得它很奇怪需要这样做。 - HappyCoder86

6
你需要运行这个命令。
rake assets:precompile

2
我一直在使用资产管道,但不得不更改我使用的硬编码url(对于我的开发环境),方法如下:
我更新了/config/application.rb以使用资产管道:
config.assets.enabled = true

我将所有图片的url都改为指向'/assets/image_without_old_image_directory_name.jpg'。

例如,我的图片原来在/public/images/xxx.jpg中。现在我将它们移动到/app/assets/images/xxx.jpg。我将img src从/images/xxx.jpg改为/assets/xxx.jpg。

最终我并不需要进行资产预编译,只需删除/public和/tmp中资产管道的所有可见方面,并且这个方法(用于开发)可以正常工作。


将img src从images/xxx.jpg更改为/assets/xxx.jpg对我有用,尽管实际路径是assets/images/xxx.jpg。谢谢! - tomb
1
这仍然是最佳实践吗?我在Rails 6中仍然遇到“没有匹配的路由[GET]”错误。 - fatfrog

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接