使用资产管道时,为什么我的所有样式表都包含在我的页面上?

时间:2013-07-28 16:48:04

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

我有一个如下所示的文件结构:

/stylesheets
  application.css.scss
  home.css.scss
  /office_listings
    new.css.scss
    index.css.scss
    show.css.scss
  /neighborhoods
    show.css.scss
    index.css.scss

等等。我的应用程序包含require_tree语句。我认为这会将我的所有CSS编译到application.css.scss文件中。但是当我访问本地主机上的页面并检查页面资源时,我不仅看到了我的application.css.scss文件,而且还看到了我所创建的所有其他CSS文件。我的javascript文件也是如此。

我尝试运行rake资产:清理并手动删除我公共文件夹中缓存的所有文件,以防万一资源有问题:我编译了几次预编译,但我仍然遇到同样的问题。

2 个答案:

答案 0 :(得分:2)

如果您在development环境中运行Rails应用程序(默认设置),则这是预期的行为。默认情况下,development配置为config.assets.debug设置为true,这会导致所有资产文件单独提供以方便调试 - 浏览器的CSS检查器将显示规则发起的正确文件从而不是总是指向单个生成的单个。

但是,如果您在production环境中预编译并运行应用程序,则只会生成并提供一个文件。您可以通过运行以下命令来测试它:

RAILS_ENV=production rake assets:precompile
RAILS_ENV=production rails server

如果您现在访问您的网站,您应该只会看到一个application.css文件,其中包含所有样式表。 (确保您的config/environments/production.rb文件包含config.serve_static_assets = true - 否则,您将无法获得任何样式表,只会看到无格式的HTML。)

有关详情,请参阅Rails guide on the asset pipeline

中的“关闭调试”部分

答案 1 :(得分:1)

如果您config.assets.debug = true config/environments/{environment}.rb {environment}可能developmentproductionconfig.assets.debug = false,那么您的所有资产文件都将像您一样展开已经提到了。

将该行更改为application.css,您只会看到application.js和{{1}}。