我已经看到这个错误在这里的多个不同线程中运行了几次,但是在尝试了几乎所有提到的解决方案之后,我仍然在我的heroku logs
中遇到了多个这些错误。
应该注意的是我使用的是rails 4.2。
有趣的是HTML
中的图片加载正常,然而尝试从我的SCSS
文件访问的图片根本不加载我在这些文件上遇到以下错误。
ActionController::RoutingError (No route matches [GET] "/assets/roses-right.png"):
正如我所说,我已尝试过多种解决方案,包括在本地和heroku服务器上运行rake assets:precompile
。我还尝试在config.serve_static_files = true
内设置config/environments/production.rb
,但仍然没有骰子。最后在我的gemfile中我有以下块:
group :production do
gem 'pg'
gem 'rails_12factor'
end
非常感谢任何帮助,谢谢。
答案 0 :(得分:1)
您需要更改scss以使用gem提供的sass帮助程序,例如:
image-path('roses-right.png')
上的文档
答案 1 :(得分:0)
我在生产模式下的Rails 5中存在一个问题,使用引擎作为宝石,图片位于/ vendor / assets / ..:
所有这些供应商的图片也会通过“rake asset:precompile”预编译到/ public / assets,如果你将它添加到config / initializers / assets.rb
Rails.application.config.assets.precompile += %w( *.ico *.gif *.png *.jpg )
运行时引用已使用本机映像名称而不是预编译的散列名称,因此最终会出现“无路由...”
我的解决方法是将/ public / assets中的资产管道对象复制到其本机名称,因此每个文件有两个版本。 本机和散列名称。
本地名称来自sprockets清单文件,所以我不能知道这些文件在gem路径中的真实位置
复制是作为“rake assets:precompile”
创建一个文件“lib / tasks / precompile.rake”
require 'json'
require 'fileutils'
namespace :assets do
task :precompile do
puts '####### Task assets:precompile extended in lib/tasks/precompile.rake !'
puts '####### Add native files to public/assets if requested outside from asset pipeline'
Dir.glob("public/assets/.sprockets-manifest*.json").each do |fname|
manifest = IO.read(fname)
mhash = JSON.parse(manifest)
mhash['files'].each do |key, value|
source = "public/assets/#{key}"
target = "public/assets/#{value['logical_path']}"
puts "# create #{target}"
FileUtils.cp(source, target)
end
end
end
end
这种克隆代码在“assets:precompile”rake任务结束时执行。