Rails 4图片path,图片url和资产url不再在SCSS文件中工作
我们应该在Rails 4中使用除image-url和其他外的其他内容吗? 他们返回不同的价值观,似乎没有道理。 如果我在/app/assetshttp://img.dovov.comlogo.png有logo.png ,并且执行以下操作,则得到以下结果:
image-url("logo.png") -> url("http://img.dovov.comlogo.png") #obviously doesn't work image-path("logo.png") -> "http://img.dovov.comlogo.png" asset-url("logo.png") -> url("/logo.png")
当然这些工作都没有,因为他们至less需要/assets在前面。
更新 :其实,我只是注意到,如何在Rails 4中访问图像? 我有一个图像在/app/assetshttp://img.dovov.comlogo.png 。 但是,如果我去任何以下的url,我仍然看不到我的形象:
http://localhost:3000/assets/logo.png http://localhost:3000/assetshttp://img.dovov.comlogo.png http://localhost:3000/logo.png http://localhost:3000http://img.dovov.comlogo.png
更新2 :我logo.png我的logo.png的唯一方法是将它移动到/app/assets/stylesheets目录,然后拉起来:
http://localhost:3000/assets/logo.png
我只是自己有这个问题。 3点,希望可以帮助:
- 如果你把图片放在你的
app/assets/images目录下,那么你应该可以直接调用这个图片,而不需要path中的前缀。 即。image_url('logo.png') - 取决于您使用资产的位置取决于方法。 如果你使用它作为
background-image:属性,那么你的代码行应该是background-image: image-url('logo.png')。 这适用于less和sass样式表。 如果您在视图中使用内联,则需要使用内置的image_tag助手来输出图像。 再一次,没有前缀<%= image_tag 'logo.png' %> - 最后,如果您正在预编译您的资产,请运行
rake assets:precompile以生成资产或rake assets:precompile RAILS_ENV=productionfor production,否则,生产环境在加载页面时将没有指纹资产。
同样对于第3点中的那些命令,如果您正在运行捆绑器,则需要使用bundle exec作为前缀。
你的第一个公式image_url('logo.png')是正确的。 如果find图像,它将生成path/assets/logo.png (加上生产中的散列)。 但是,如果Rails无法find您指定的映像,则会回退到http://img.dovov.comlogo.png 。
接下来的问题是:为什么Rails没有find你的形象? 如果你把它放在app / assets / images / logo.png中,那么你应该可以访问http://localhost:3000/assets/logo.png 。
如果可行,但你的CSS没有更新,你可能需要清除caching。 从项目目录中删除tmp/cache/assets并重新启动服务器(webrick等)。
如果失败了,你也可以尝试使用background-image: url(logo.png); 这将导致你的CSS寻找具有相同的相对path(在这种情况下是/资产)的文件。
我有一个类似的问题,试图添加内联CSS的背景图像。 由于资产同步的方式,不需要指定图像文件夹。
这对我工作:
background-image: url('/assets/image.jpg');
我刚刚发现,通过使用asset_url帮手,你解决了这个问题。
asset_url("backgrounds/pattern.png", image)
Rails 4.0.0将会在你的css文件中查看与image-url在同一目录结构中定义的image-url 。
例如,如果您在assets/stylesheets/main.css.scss , image-url('logo.png')的CSS变为url(/assets/logo.png) 。
如果你把你的css文件移动到assets/stylesheets/cpanel/main.css.scss , image-url('logo.png')就会变成/assets/cpanel/logo.png 。
如果要直接在assets / images目录下使用图像,可以使用asset-url('logo.png')
样式表:url(asset_path('image.jpg'))