Rails Assets 预编译太慢了~12hrs

Posted

技术标签:

【中文标题】Rails Assets 预编译太慢了~12hrs【英文标题】:Rails Assets precompile is too slow ~12hrs 【发布时间】:2014-02-24 06:28:11 【问题描述】:

我是本地预编译资产like this RAILS_ENV=production bundle exec rake assets:precompile,但是 12 小时太慢了。我不知道会发生什么!我不知道如何开始做某事。 此外,当我对一些样式表文件进行更改时,这些延迟大约 10 秒

请任何人帮助我,谢谢!

这是我的 applications.css.scss

@import "_font-awesome";
@import "jquery.ui.core";
@import "jquery.ui.theme";
@import "dataTables/src/demo_table_jui";
@import "token-input-facebook";
@import "fullcalendar";
@import "fullcalendar.print";

@import "bootstrap";
@import "bootstrap-multiselect";
@import "bootstrap-datetimepicker";

@import "header";
@import "sub_header";
@import "students";
@import "people";
@import "institutions";

我的宝石文件:

gem 'sass-rails', '>= 3.2'
gem 'bootstrap-sass', '~> 3.0.3.0'

它的版本:

bootstrap-sass (3.0.3.0)
sass (3.2.12)
sass-rails (3.2.6)

附加信息:

rails 3.2.16
ruby 1.9.3

更新1

My complete Gemfile

更新2

当我在生产模式下禁用资产压缩config.assets.compress = false时,我得到了结果:

real    5m13.113s
user    5m5.355s
sys     0m5.268s

UPDATE3

得到改进但没有解决方案。

我更改了 css_compresor,现在我使用的是:yui。 我更改了 application.css.scss 以支持使用 Sprocket 的 require 指令。

现在这是我的application.css.scss file。

预编译时间:~24min

【问题讨论】:

12 小时,真的吗? 你能给我们整个 Gemfile 吗? @marvelousNinja pastebin.com/BSbadzrj 我不知道这是否与此有关,诚然,但是您的资产文件夹中是否有一些特别大的文件(图像和/或其他非 css/js 资产)?另外,预编译时您的内存和 CPU 使用情况如何?是否有很多交换等正在进行? 尝试部署到heroku。当您执行 git push 时,它将编译您的资产。这将测试问题是出在您的机器上还是出在您的代码上。 【参考方案1】:

我解决了这个问题:

问题是在我的 .scss 文件中使用了 @extend 语句。 这个问题出现在这个 sass 版本中。

我想要更多语义化的 html 文件(READ HERE 了解更多信息)。

我在对 Sprockets 预编译进行自省时发现了这个问题。有this很好的教程

解决方案是从我的 scss 文件中删除所有 @extend 句子,并在我的 html 中使用纯引导程序。

示例:我必须更改它。

# main.html
<div class='user-information'> ... </div>
# main.scss
.user-information 
  @extend .col-md-12

通过这个:

# main.html
<div class='col-md-12'> ... </div>

【讨论】:

【参考方案2】:

看看这个,你的问题的根源可能是相似的(即@import很慢):https://gist.github.com/noniq/1746744

在最快的 i7 Macbook Pro 上,我们的资产编译时间为 7 分钟。使用上述技巧将其缩短到 2 分钟多一点。事实证明我们对罗盘的使用很差,更好的解决方案是只在必要时导入它,并且只在给定的 scss 部分中导入我们需要的罗盘的特定部分。即使是导入 compass 的空 scss 文件也需要大约 2 秒的时间来编译,而且由于我们有很多很多部分,所以它加起来了。

【讨论】:

以上是关于Rails Assets 预编译太慢了~12hrs的主要内容,如果未能解决你的问题,请参考以下文章

rails4 rake assets 在生产环境中预编译生成错误的javascript文件

预编译咖啡脚本文件(Rails 4)

即使在 config/initializers/assets.rb 中声明,Sprockets Rails Helper Asset 也未预编译

Rails 3.1 资产预编译 - 包括所有 javascript 文件

使用 rails 资产管道预编译超薄模板

预编译heroku后生产中缺少Rails资产