2014-12-24 142 views
0

我有自定义的CSS文件style.css中,而不是在application.css:Rails不显示背景图片

background-image: url('book.png'); 

我做

rake assets:precompile RAILS_ENV=production 

,但它并不显示图像。我还给了图像权限(755)。我该如何解决它?

并且在控制台中没有错误

日志/ production.log

I, [2014-12-24T01:22:04.323979 #27157] INFO -- : Started GET "/login" for 81.21.82.67 at 2014-12-24 01:22:04 -0500 
I, [2014-12-24T01:22:04.329702 #27157] INFO -- : Processing by BookController#login as HTML 
I, [2014-12-24T01:22:04.333589 #27157] INFO -- : Rendered book/login.html.erb within layouts/application (1.0ms) 
I, [2014-12-24T01:22:04.334700 #27157] INFO -- : Completed 200 OK in 5ms (Views: 2.9ms | ActiveRecord: 0.0ms) 

当我从浏览器http://example.com/assets/book.jpg打开它不开,太

+0

没有足够的信息 – Nithin

+0

@Nithin还有什么我可以为你写吗? – alizade

+0

book.png在哪里住?您是否得到404? – Doon

回答

0

假设book.png是本地图片,您可能需要做两处更改:

a。将style.css更改为style.css.scss

b。将background-image: url('book.png');替换为background-image: image-url('book.png');

这可确保CSS使用book.png图片的完整资产URL。

+0

RAILS_ENV =生产耙子资产:预编译 耙子中止! NoMethodError:未定义方法'[]'为零:NilClass (在/usr/local/projects/book/app/assets/stylesheets/application.css) – alizade

0

预编译的图像路径将被更改,因此您需要使用asset_path从资产获取正确的图像路径。

如果您使用asset_path,那么预编译后将很容易获得图像。

使用此:

background-image: asset_path('book.png'); 

代替:

background-image: url('book.png'); 
+0

这里没有404错误,但它仍然没有工作 – alizade

+0

它的在这里工作很好。你能把你的课堂粘贴在这里吗? –

0

Guides are your friends

问题是资产流水线中的资产是已重命名为以包含反映其内容的校验和。问题在于,到实际图像的链接与您期望的不同。仅在生产环境中,资产仅针对生产环境进行预编译。在开发过程中,没有任何问题,因为任何更改后资产都会在原地进行重新编译,并提供最小化可能缓存的参数。

这是为了更大的利益。这样做的结果是,如果文件在新版本中发生更改,则它在服务时会得到不同的名称(即使您自己没有重命名),因此浏览器和缓存系统会立即检测到更改并请求新资产。缓存无效无痛苦。

再培训局的资产预编译过程中使用,并且可以通过添加.erb到文件的名称,如login.css.erb使用它。有an example in the guides

.class { 
    background-image: url(<%= asset_path 'image.png' %>) 
} 

的导游甚至形容的base64嵌入图像直接进入CSS的方法。它适用于小图像连接PNG图标,少一个请求,图像大小只有+ 33%。

#logo { 
    background: url(<%= asset_data_uri 'logo.png' %>) 
} 
+0

RAILS_ENV =生产耙子资产:预编译 rake中止! Sass :: SyntaxError:“... und-image:url(”:expected“)”之后无效的CSS,是“<%= asset_path ...” (位于/ usr/local/projects/book/app/assets/stylesheets/login.css – alizade

+0

@alizade你在样式表中使用了Sass/SCSS吗?Sass-rails中有一个助手可以引用Rails资产,或者你可以用Sass的'@ import'导入它,这个案例覆盖了@ PeterGoldstein的回答 –

+0

不,我的文件是login.css,而不是.scss,我什么都不导入 – alizade