Tob*_*ray 18 ruby ruby-on-rails ruby-on-rails-4 docker bitbucket-pipelines
问题:在自动构建中
执行rake assets:precompile任务时,我的RAM耗尽.是否有任何策略可以执行增量预编译,或以其他方式执行预编译阶段而不消耗尽可能多的RAM?看起来该任务比构建的基线消耗大约850 MB.
上下文:
我正在尝试获得一个Docker容器Bitbucket Pipelines版本的自动构建.应用程序堆栈包括Rails 4.2.7,PostgreSQL 9.3,Java 8,Maven 3.3.9和JRuby 9.1.2.0.我尝试使用Debian Jessie创建基于Alpine Linux的图像,但它在基线内存方面没有太大差别.
使用NodeJS作为预编译的 JavaScript 解释器(或其他具有低峰值 RAM 使用率的 JavaScript 解释器)。
对于上下文,我使用 NodeJS 4.5.0 与 therubyracer v0.12.2 和 therubyrhino v2.0.4 进行比较
听起来很愚蠢,但在使构建过程复杂化之前,查看是否有更强大的构建机器可用,或者是否有可用的交换空间(尽管这可能会增加构建时间)可能是有意义的。
高峰值 RAM 利用率似乎是therubyrhino(Mozilla 的 Rhino JavaScript 解释器)和therubyracer(V8 JavaScript 解释器)的基本特征。似乎没有一种有效的方法可以显着降低资产预编译阶段消耗的 RAM 量。最可行的路径似乎是在构建生命周期之外预编译资产并将它们缓存在某个地方,以便可以获取它们而不是预编译,如 @user4776684 建议的那样。正如对该问题的评论所暗示的那样,Rails 版本和 Ruby 版本都有影响,但不如 JavaScript 解释器那么大。
正如@slowjack2k 上面提到的,如果使用Bundler,可以利用并行配置仅调用 NodeJS 进行预编译任务,并保持原始构建相对不变。我没有考虑这一点,因为切换解释器更容易,但是虽然我能够使用 rake 和 NodeJS 预编译资产,但当涉及到 rake + therubyrhino 调用时,它们似乎并未被视为预编译,因此它们是重新预编译。我通过以编程方式设置的BUNDLE_GEMFILE环境变量来完成此操作,该变量指向一个完全独立的 gemfile,该文件使用 MRI Ruby 和 NodeJS,而不是 JRuby 和 therubyrhino。
| 归档时间: |
|
| 查看次数: |
1016 次 |
| 最近记录: |