我似乎对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
。但我并不太担心。
答案 0 :(得分:1)
当您处于开发模式时,会提供该机制来帮助您进行调试。如果切换到生产模式,您将只有一个链接到一个CSS文件,其中所有内容都已合并,最小化(但您需要预编译资产以在生产中运行,如果切换回开发,请记住销毁预编译资产)。