Ruby on rails ActionController::RoutingError(没有与[GET]";/assets/images/control_top.png";匹配的路由):在rails 3.2.8中

Ruby on rails ActionController::RoutingError(没有与[GET]";/assets/images/control_top.png";匹配的路由):在rails 3.2.8中,ruby-on-rails,Ruby On Rails,背景图像未上载到“我的视图”页。显示此错误 ActionController::RoutingError(没有与[GET]匹配的路由“/assets/images/control\u top.png”) 如何解决此问题?在生产环境中,Rails将不负责为静态资产提供服务。因此,您得到了这个错误 这由应用程序中config/environment/production.rb中的此设置控制: config.serve_static_assets = false 您可以将其设置为true 或者试试这

背景图像未上载到“我的视图”页。显示此错误

ActionController::RoutingError(没有与[GET]匹配的路由“/assets/images/control\u top.png”)


如何解决此问题?

在生产环境中,Rails将不负责为静态资产提供服务。因此,您得到了这个错误

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

config.serve_static_assets = false
您可以将其设置为true

或者试试这个

rake assets:precompile 

命令(如果您升级到新版本的Rails(想到Rails 4和Rails 3.2.16),则将图像、css和js从app/assets编译并复制到public/

),而您突然发现此错误,很可能您的样式表指向的是文件的非指纹、非缓存版本。如果您使用的是资产管道,为了利用它,您需要使用指向文件的指纹、缓存版本的新帮助程序。为此,您需要在css文件中添加erb,或使用sass

不正确(使用sass):

正确(使用sass):


有关更多信息,请参见此处:

您必须运行此命令

rake assets:precompile

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

我继续使用资产管道,但不得不更改我使用的硬编码url,如下所示(用于我的开发环境):

我更新了我的/config/application.rb以使用资产管道:

config.assets.enabled = true
我将所有图像URL更改为指向“/assets/image\u,而不指向旧的图像目录\u name.jpg”

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


我最终不需要进行资产预编译,只需在/public和/tmp中删除资产管道的所有可见方面,它就可以工作了(用于开发)。

升级到Rails 3.2.16后,这让我感到有些紧张,所以它不仅仅是4.x。@MarkBerry感谢您的参与。我将更新我的答案,以包括该版本。根据文档,还可以使用资产url('yourimage.png'),因此“image”添加似乎不起作用-只是语法提琴手强制更改命名约定。当然,我可以在我工作的所有项目中的所有数千行css上运行一个awk脚本,但这可能会在一些不可预见的情况下失败,并破坏一些东西。有谁知道一个gem可以恢复这个和类似的语法突发改变的原始功能吗?注意*你应该确保这是在production中设置的,而不是application.rb。刚刚让我头疼了一个小时。Rails 4中的config.service\u static\u filesRails 5中的config.public\u file\u server.enabled=true。建议仅在development.rb中使用,而不要在production.rb中使用,因为web服务器(例如Apache、Nginx)应该在生产中为资产服务。
config.assets.enabled=true
很重要,这是为什么?你的建议很到位,但我觉得很奇怪,这是必要的。将img src从images/xxx.jpg更改为/assets/xxx.jpg对我来说很有效,即使实际路径是assets/images/xxx.jpg。谢谢这仍然是最佳做法吗?我在Rails 6中,仍然没有路线匹配[GET]
rake assets:precompile
config.assets.enabled = true