Ruby on Rails,连接后在css中破坏了url()

时间:2014-10-23 22:03:21

标签: css ruby-on-rails ruby-on-rails-4 bower

场合

  1. bower
  2. 中使用.bowerrc
  3. bowerrc设置目录vendor/assets/bower_components
  4. 在配置application.rb中,我输入了config.assets.paths << Rails.root.join('vendor', 'assets', 'bower_components')
  5. 安装名为«fotorama»的图库插件,由bower
  6. 执行
  7. 插件«fotorama»的所有文件现已存储在此目录"/vendor/assets/bower_components/fotorama"
  8. 在清单css文件application.css中,我输入*= require fotorama/fotorama.css
  9. 在布局文件中,我输入了<%= stylesheet_link_tag "application" %>
  10. 启动服务器rails server - 一切正常。在生成的页面源中,我看到<link href="/assets/fotorama/fotorama.css?body=1" rel="stylesheet" />。这个css文件有这行.fotorama__video-play {background: url(fotorama.png) no-repeat},还有许多其他行使用url作为文件“fotorama.png”,没关系,浏览器尝试在css文件附近找到这个png文件,并成功完成。< / p>

    停止服务器,预编译所有essets rake assets:precompile,然后在生产环境中运行服务器rails server -e production

    问题

    在生产环境中,我的所有css文件都已连接在一起,并且在页面源中它看起来像<link href="/assets/application-2d31fc33890d01b046194920367eb3d4.css" rel="stylesheet" />,而且此文件仍有此行.fotorama__video-play {background: url(fotorama.png) no-repeat}。现在浏览器试图在http://localhost:3000/assets/fotorama.png找到png文件,但它不在这里,它不在任何地方,因为,我不知道为什么,"fotorama.png"中没有"public/assets"文件夹中。

    问题

    1. 为什么图片无法从"/vendor/assets/bower_components"传输到“public/assets
    2. 您有什么想法,我该怎么做才能解决我的问题?重要的是,我不想以编程方式手动更改css中的URL - 确定。
    3. 请原谅我的英语,感谢所有帮助我的人。

1 个答案:

答案 0 :(得分:0)

解决方案和答案

  1. 默认情况下,只有"app/assets"的文件传输到"public/assets"。要传输来自"/vendor/assets" "application.rb"此代码config.assets.precompile += %w(*.png *.jpg *.jpeg *.gif)
  2. "bower.json"图片
  3. gulp任务:如果您在.erb中看到一些更改,请将npm moudle的所有主要文件的主要文件称为“main-bower-files”。使用扩展名为"app/assets/stylesheets/bower_components_manifest.css"的每个css文件生成清单文件,并保存<%= asset_path '
  4. 此任务继续:在每个主要的css文件中,通过名为“gulp-css-url-adjuster”的npm模块,在每个url ' %>加上目录路径之前和url("fotorama.png")之后添加。 url("<%= asset_path 'fotorama/fotorama.png' %>")&gt;&gt; .erb。添加"app/assets/stylesheets/application.css"扩展名并保存。
  5. * require bower_components_manifest我添加{{1}}。
  6. 其他解决方案之一,使用gem“bower-rails”。但我不喜欢它,因为在凉亭的一些插件中我需要覆盖一些“主”文件,而gem“bower-rails”不能这样做,npm“main-bower-files”可以。而且我喜欢在开始将我的代码包含到rails,gulp,bower之前保存我的工作流程。