RoR Asset Pipeline生成额外链接

时间:2014-01-26 18:23:01

标签: css ruby-on-rails ruby ruby-on-rails-3 asset-pipeline

我似乎对Rails Asset Pipeline有一些奇怪的行为。我已经通过子域(管理员,论坛,用户等)分解了我的CSS,并创建了单独的清单文件。 CSS文件也放在app / assets / stylesheets目录中的相应子目录中。我遇到的问题是我将指定要在stylesheet_link_tag中使用的相应清单文件,但是当我查看HTML源代码时,编译的css和所有单独的css文件都会被链接。以下是一个例子:

Ruby Version 1.9.3

Rails版本3.2.14

application.rb

中的配置
config.assets.enabled = true
config.assets.initialize_on_precompile = false
config.assets.precompile += ['forum.css', 'application.css']

清单文件/app/assets/stylesheets/forum.css

/*
* This is a manifest file that'll be compiled into application.css, which will include all the files
* listed below.
*
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
* or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
*
* You're free to add application-wide styles to this file and they'll appear at the top of the
* compiled file, but it's generally better to create a new file per style scope.
*
*= require_self
*= require_tree ./forum_styles/
*/

/ app / assets / stylesheets / forum_styles目录中有一个table.css.scss文件

application.html.haml布局

!!!
%html
  %head
    %title= content_for?(:title) ? yield(:title) : "Forum"
    = stylesheet_link_tag "forum"
    = csrf_meta_tags
  %body
    #breadcrumbs= yield :breadcrumbs
    #main_wrapper
      #flash-message-container
        = render "shared/flash_message"
      = yield 

当我预编译资产时,重新启动应用程序服务器,转到索引页面并查看HTML源代码,我看到以下内容:

<head>
  <title>Forum</title>
  <link href="/assets/forum.css?body=1" media="screen" rel="stylesheet" type="text/css" />
  <link href="/assets/forum_styles/table.css?body=1" media="screen" rel="stylesheet" type="text/css" />
  <meta content="authenticity_token" name="csrf-param" />
  <meta content="rCm2oS+Role4CXdIKoLSkNLYVMdpDVxCb2GS+ajk7EQ=" name="csrf-token" />
</head>

即使很难,我只在stylesheet_link_tag中指定了forum.css文件,但是链接了两个.css文件;有效地加倍浏览器加载的CSS。我已经验证了两个文件中的CSS是完全相同的。这是正常的行为,还是我需要在配置中更改为仅链接已编译的forum.css?另外,我注意到css链接上没有MD5哈希值;只是?body=1。但我并不太担心。

1 个答案:

答案 0 :(得分:1)

当您处于开发模式时,会提供该机制来帮助您进行调试。如果切换到生产模式,您将只有一个链接到一个CSS文件,其中所有内容都已合并,最小化(但您需要预编译资产以在生产中运行,如果切换回开发,请记住销毁预编译资产)。