我们有一个相当大的应用程序正在 Heroku 上运行...这是一个使用 browsercms 作为基础的应用程序,并且它是建立在其之上的。 Gemfile 并不是那么大(我们没有比普通应用程序更多的 gem),但由于某种原因,部署需要 15 分钟。由于所有 Assets ,编译 Assets 并将其推送到 s3(通过 assetsync)大约需要 5 分钟,但在此期间花费了剩余的 10 分钟:
----> 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
编辑:我们正在使用 Rails 3.2.7
最佳答案
当 bundle 程序使用具有 git 存储库的 gem 时,它将下载整个 git 存储库以包含该 gem,而不仅仅是 master 分支或任何作为主分支的分支。
我们在使用 sferik 的 rails_admin
gem 时也遇到了同样的问题。
如果您像这样指定特定分支,可能会有所帮助:
gem "browsercms", "3.5.3", git: 'git://github.com/josiahivey/browsercms.git', :branch => 'master'
一种判断方法是查看更改前后编译的 slug 大小。在我们的例子中,rails_admin
负责大约 30mb 的 slug 大小。 Heroku 也有 100mb 的 slug 大小限制,仅供引用。
您还可以尝试像这样运行 bundle 命令:
bundle pack --all
这会将你所有的 gem(应该还有 git 的,因为 --all 开关)放入你的供应商/缓存目录中。
正如 bundle 程序项目的 github 问题中所示(看最后,一个 Heroku 人的回应):
关于heroku 部署需要很长时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12440344/