2012-09-15 86 views
6

我们已经有一个相当大的应用程序在heroku上运行......这是一个使用browsercms作为基础的应用程序,它建立在此基础之上。 Gemfile不是那么大(我们没有比我们的普通应用程序更多的宝石),但由于某种原因,部署需要15分钟。编译和(通过assetsync)大约需要5分钟,由于所有的资产,推动资产S3,但剩下的10分钟在此度过:heroku部署时间很长

----> Heroku receiving push 
-----> Removing .DS_Store files 
-----> Ruby/Rails app detected 
-----> Using Ruby version: ruby-1.9.3 
-----> Installing dependencies using Bundler version 1.2.0 
     Running: bundle install --without development:test --path vendor/bundle --binstubs bin/ --deployment 

任何人有,为什么这部分需要很长时间任何线索?该的Gemfile锁在回购协议,并被推到Heroku的,这里是我们的Gemfile的要点:https://gist.github.com/aa44bbb06eed97736c20

编辑:我们在轨道上3.2.7

+0

你尝试过售卖你的宝石吗?尝试使用'bundle package'来缓存下载的'.gem'文件,然后运行'git add。 && git commit -m“Gems中的供应商将它们添加到您的存储库中,这应该使Gem安装即时(假设这是瓶颈) – neersighted

+1

它也可能是资产编译阶段,在这种情况下,您希望运行'rake assets:precompile && git commit -a -m“在每次部署前重新编译资产” – neersighted

+0

供应gem帮助smidgen ......并且在本地进行预编译并不能真正节省时间 - 花费的时间也一样多 – courtsimas

回答

2

当捆绑使用,有一个混帐回购协议的瑰宝它会下载整个git repo以包含gem,而不仅仅是主分支或任何分支是主分支。

我们与sferik的rails_admin宝石有同样的问题。

威力帮助,如果你指定,像这样一个特定的分支:

gem "browsercms", "3.5.3", git: 'git://github.com/josiahivey/browsercms.git', :branch => 'master' 

一种方式来告诉是看编译段塞大小你做出改变之前和之后。在我们的例子中,rails_admin是我们的slu size大小的约30mb。 Heroku也有100mb的塞子尺寸限制,仅供参考。

你也可以尝试运行捆束包装的命令是这样的:

bundle pack --all 

这将会把所有的宝石(据说混帐之辈,因为--all开关)为您的供应商/缓存目录。

在本github上isssue为打捆项目表示(看看到底是哪里一个Heroku的家伙响应):

https://github.com/carlhuda/bundler/issues/67

+0

指定该分支最多节省了几个megs,目前我们的芯片尺寸为55兆(其中很多是browsercms)。 – courtsimas

0

两件事加速了这一过程。 Bundler 1.2.1似乎有所帮助,并且turbo sprockets保存了好几分钟。现在是可以忍受的。