【问题标题】:Ruby on Rails, broken url() in css after concatenationRuby on Rails,连接后css中的url()损坏
【发布时间】:2014-10-23 22:03:20
【问题描述】:

情况

  1. .bowerrc 中使用bower
  2. bowerrc设置目录vendor/assets/bower_components
  3. 在配置中application.rb 我输入了config.assets.paths << Rails.root.join('vendor', 'assets', 'bower_components')
  4. 安装名为 «fotorama» 的画廊插件,由 bower 完成
  5. 插件«fotorama»的所有文件现在都存储在这个目录"/vendor/assets/bower_components/fotorama"
  6. 在清单 css 文件 application.css 我输入 *= require fotorama/fotorama.css
  7. 在布局文件中我输入了<%= stylesheet_link_tag "application" %>

启动服务器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文件,成功了。

停止服务器,预编译所有资产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文件,但它不在这里,它不在任何地方,因为,我不知道为什么,"public/assets"文件夹中没有"fotorama.png"

问题

  1. 为什么图片没有从"/vendor/assets/bower_components"传输到“public/assets
  2. 您有什么想法吗,我可以做些什么来解决我的问题?重要的是,我不想以编程方式手动更改 css 中的 url — 好的。

对不起,我的英语不好,感谢所有愿意帮助我的人。

【问题讨论】:

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


    【解决方案1】:

    解决方案和答案

    1. 默认情况下,只有来自"app/assets" 的文件才会传输到"public/assets"。要从"/vendor/assets" 传输图像,请输入"application.rb" 此代码config.assets.precompile += %w(*.png *.jpg *.jpeg *.gif)
    2. gulp 的任务:如果您看到 "bower.json" 中的一些更改,请通过名为“main-bower-files”的 npm moudle 获取 bower 组件的所有主文件。为每个带有.erb扩展名的css文件生成一个清单文件,并保存"app/assets/stylesheets/bower_components_manifest.css"
    3. 此任务继续:在每个主 css 文件中,通过名为“gulp-css-url-adjuster”的 npm 模块,在每个 url 之前添加 <%= asset_path ' 加上目录路径,并在 ' %> 之后。 url("fotorama.png") >> url("<%= asset_path 'fotorama/fotorama.png' %>")。添加.erb 扩展名并保存。
    4. "app/assets/stylesheets/application.css" 我添加* require bower_components_manifest

    其他解决方案之一,使用 gem "bower-rails"。但我不喜欢它,因为在 bower 的某些插件中我需要覆盖一些“主”文件,而 gem“bower-rails”不能这样做,npm“main-bower-files”可以。我喜欢保存我在开始之前所做的一切工作流程,包括我的代码到 rails、gulp、bower。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-20
      • 2017-03-21
      • 1970-01-01
      • 2011-05-10
      • 1970-01-01
      • 1970-01-01
      • 2016-04-01
      相关资源
      最近更新 更多