我无法理解为什么我的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 'rails', '4.0.0'
gem 'sass-rails', '~> 4.0.0'
我正在使用capistrano部署,但我不认为这是一个与capistrano有关的问题,资产编制得很好。
修改 到目前为止我(尝试失败)的尝试:
image-url('image.jpg'); -> http://www.mydomain.it/images/image.jpg
image_url('image.jpg'); -> same as above
url(image-path('header.jpg')); -> http://www.mydomain.it/images/image.jpg
asset-url('image.jpg', image); -> http://www.mydomain.it/image.jpg
问题仍然存在:资产已编译但未经摘要请求。
修改
关注此问题Rails 4 image-path, image-url and asset-url no longer work in SCSS files我移动了我的资产并使用了组合 asset-url并将我的资产放在/ public文件夹中,背景图像正常工作,即使问题仍然存在,因为应用程序未使用图像的带时间戳的版本。 所以只有一个(不是好的,也不是坏的)解决方法。
答案 0 :(得分:4)
应该使用asset_path
。此外,它需要在ERB标记下运行,因为SCSS不编译asset_path。将common.scss
重命名为common.scss.erb
.body { background-image: url(<%= asset_path 'bg.jpg' %>) }
了解更多here。
答案 1 :(得分:2)
需要考虑的一些事项:
group: :production
或其他内容。这是新的铁路规范rake assets:clobber
并删除包含sass缓存的tmp
文件夹RAILS_ENV=production rake assets:precompile
,并告知我们在公共rake assets:precompile
,它可以提供更多日志答案 2 :(得分:1)
从此
更改您的设置config.serve_static_assets = false #also tried true
到
config.serve_static_assets = true
原因:您现在允许通过您的应用调用/提供资源。您早先不是,它目前由您的服务器直接提供,即apache
或ngnix
。
我不相信这是可能的
image-url('image.jpg'); -> http://www.mydomain.it/images/image.jpg
image_url('image.jpg'); -> same as above
url(image-path('header.jpg')); -> http://www.mydomain.it/images/image.jpg
asset-url('image.jpg', image); -> http://www.mydomain.it/image.jpg
它应包含assets
代替images
。如果是这种情况,除资产管道外还会发生其他事情。
自从上次我的问题没有用,所以我想给你看工作的应用程序,我已经创建了heroku应用程序(代码在github上托管)。您可以检查所有提交。它专门为这个问题而做。最后的解决方法就是这个。
最终修复:https://github.com/passion8/so2_fix/commit/64acc654d8926098ec5a40579f4a0e005037e381
Heroku网址:https://vast-plains-3919.herokuapp.com/
Github代码:https://github.com/passion8/so2_fix
Github提交:https://github.com/passion8/so2_fix/commits/master
如果仍然无效,请查看
答案 3 :(得分:0)
尝试将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')
答案 4 :(得分:0)
我正在使用它和它为我工作。 使用格式为 common.css.scss
的文件.body
{
background:url(image_name.gif) no-repeat;
}
答案 5 :(得分:0)
rails不会为实际不存在的资产附加摘要,因此请确保图像已存在于图像目录中。
答案 6 :(得分:0)
我在这里遇到同样的问题,我用Base 64修复了它,使用
内联图像资产数据-URL(&#34;图像/ image.jpg的&#34)
答案 7 :(得分:0)
在.scss的情况下使用image-url
,因为image_url
适用于.erb文件。
答案 8 :(得分:0)
将文件名从.css
更改为.css.erb
,然后使用asset_url
:
background-image: url(<%= asset_url('x-icon.png') %>);
或者您可以使用scss来做
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或类似服务提供。