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文件
即使在 config/initializers/assets.rb 中声明,Sprockets Rails Helper Asset 也未预编译