Rails4:image_url不在scss中生成摘要
我无法理解为什么我的css文件没有使用辅助方法image_url
将摘要附加到我的资产
我的资产是正确预先推荐的,文件确实包含摘要。 我也可以手动访问它们(使用消化的URL)。 最奇怪的是,它一开始就有效。
这是我的配置:
config.assets.js_compressor = :uglifier config.assets.compile = false config.assets.digest = true config.assets.version = '1.0' config.serve_static_assets = false #also tried true
这是我的application.css:* = require_tree。
这是common.scss文件,用于包含图像:
body{ background: image_url('bg.jpg'); font-family: 'Lato', sans-serif; overflow-x: hidden; }
图像以及样式表位于资产/图像和资产/样式表中的子文件夹中。
在这里我的gem:
gem 'rails', '4.0.0' gem 'sass-rails', '~> 4.0.0'
我正在使用capistrano进行部署,但我不认为这是一个与capistrano相关的问题,资产编制得很好。
编辑到目前为止我(尝试失败)的尝试:
image-url('image.jpg'); -> http://sofzh.miximages.com/ruby-on-rails/image.jpg image_url('image.jpg'); -> same as above url(image-path('header.jpg')); -> http://sofzh.miximages.com/ruby-on-rails/image.jpg asset-url('image.jpg', image); -> http://sofzh.miximages.com/ruby-on-rails/image.jpg
问题仍然存在:资产已编译但未经摘要请求。
编辑
关注这个问题Rails 4 image-path,image-url和asset-url不再适用于SCSS文件我移动了我的资产并使用asset-url的组合并将我的资产放在/ public文件夹中,背景图像正常工作,甚至虽然问题仍然存在,因为应用程序没有使用图像的带时间戳的版本。 所以只有一个(不是好的,也不是坏的)解决方法。
应该使用asset_path
。 此外,它需要在ERB标记下运行,因为SCSS不编译asset_path。 将common.scss
重命名为common.scss.erb
.body { background-image: url(<%= asset_path 'bg.jpg' %>) }
在这里阅读更多。
有些事情需要考虑:
- 确保图像不是“gitignored”或其他东西
- 确保相同的图像不在公用文件夹下
- 确保与资产相关的gems直接在Gemfile中,而不是在
group: :production
或其他内容中。 这是新的铁轨规范 - 运行
rake assets:clobber
并删除包含sass缓存的tmp
文件夹 - 运行
RAILS_ENV=production rake assets:precompile
在生产环境下手动RAILS_ENV=production rake assets:precompile
,并告诉我们在公共环境下生成的文件列表 - 运行
rake assets:precompile
在开发模式下rake assets:precompile
,它可以提供更多日志
从此更改您的设置
config.serve_static_assets = false #also tried true
至
config.serve_static_assets = true
原因:您现在允许通过您的应用调用/提供资产。 早些时候你不是,它目前由您的服务器直接提供,即apache
或ngnix
。
我不相信这是可能的
image-url('image.jpg'); -> http://sofzh.miximages.com/ruby-on-rails/image.jpg image_url('image.jpg'); -> same as above url(image-path('header.jpg')); -> http://sofzh.miximages.com/ruby-on-rails/image.jpg asset-url('image.jpg', image); -> http://sofzh.miximages.com/ruby-on-rails/image.jpg
它应该包含assets
来代替images
。 如果是这种情况,除资产管道外还会发生其他事情。
从上次我的问题没有帮助,所以我想给你看工作的应用程序,我已经创建了heroku应用程序(代码托管在github上)。 您可以检查所有提交。 它专门为这个问题而做。 最后的解决方法就是这样。
最终修复: https : //github.com/passion8/so2_fix/commit/64acc654d8926098ec5a40579f4a0e005037e381
Herokuurl: https : //vast-plains-3919.herokuapp.com/
Github代码: https : //github.com/passion8/so2_fix
Github提交: https : //github.com/passion8/so2_fix/commits/master
如果这仍然不起作用,请查看
尝试将common.scss
更改为common.css.scss
阅读更多: http : //guides.rubyonrails.org/asset_pipeline.html#preprocessing
此外,要向资产管道添加其他文件夹,请将以下内容添加到config / environments / production.rb
config.assets.paths << Rails.root.join('app', 'assets', 'images') config.assets.paths << Rails.root.join('app', 'assets', 'stylesheets')
我正在使用它和它为我工作。 使用此格式为common.css.scss的文件
.body { background:url(image_name.gif) no-repeat; }
rails不会为实际不存在的资产附加摘要,因此请确保图像已存在于图像目录中。
我在这里有同样的问题,我通过Base 64使用内联图像来修复它
资产数据-URL( “图像/ image.jpg的”)
在.scss的情况下使用image-url
,因为image_url
适用于.erb文件。
将文件名从.css
更改为.css.erb
并使用asset_url
:
background-image: url(<%= asset_url('x-icon.png') %>);
或者你可以使用scss和do
background-image: url(asset-path('x-icon.png'));
不要在路径中包含“资产”,我不是"assets/x-icon.png"
,这不起作用。
要在本地测试,请确保您的资产配置模仿生产,例如
config.public_file_server.enabled = true config.assets.compile = true config.assets.digest = true
或者,如果您在生产环境中启动,请确保config.public_file_server.enabled = true
以便public
目录由Rails提供服务,通常它将由Apache或类似服务器提供。
- Rails 5.1