应该用应用程序捆绑宝石吗?

Ste*_*ncw 6 ruby gem ruby-on-rails bundler

刚刚买了一台新机器,我抓住机会尝试新的东西.RVM非常好,我一直在使用gemsets,但在阅读了几篇博文后,我决定使用switch to rbenv并使用bundler来专门管理我的宝石,如Ruby Rogues第45集所述.

我没有那么多合作,如果我这样做,通常会与一两个人合作.

捆绑器文档详细说明了vendor/cache通过运行以下命令将gem打包到目录中的能力:

$ bundle package
$ bundle install --local
Run Code Online (Sandbox Code Playgroud)

伟大的私人宝石,可以检查源控制; 我想部署到干净的服务器或协作更容易?

但是,如果您检查GemfileGemfile.lock进入源代码管理,那么需要bundle package什么?

Ryan Mcgeary在2011年初的博客文章中提倡这种方法,并在2010年的另一篇博客文章中提到Yehuda Katz说:

您可能希望将捆绑的gem安装到其他位置,例如应用程序本身中的目录.这将确保每个应用程序都有自己的宝石副本,并提供额外的隔离级别.

这种隔离就像我想象的宝石一样,我可以想象当你拥有庞大的系统宝石列表时,很难知道你的应用程序实际使用了哪些宝石.

那么用应用包装宝石?

有人这样做吗?这种做法过时了吗?

什么是最佳实践以及在应用程序中捆绑宝石的优点/缺点是什么?

The*_*Rob 4

我认为捆绑包的用例范围很窄。

Gemfile 和 Gemfile.lock 处理版本锁定,但最终您仍然会在捆绑安装时访问 ruby​​gems.org 并下载 gem。

我认为捆绑包很有用的三种场景:

1)我有一个干净的生产环境,我根本不想碰rubygems.org。这可能是由于安全协议、有限的互联网访问等造成的。最后,我有一个完全独立的应用程序包,其中所有的宝石都已排列好并准备就绪,而无需真正接触服务器环境或互联网。

2) 我想下载这个 gem,解压它,修改它,然后使用那个特定的。特别是如果我不想处理 git、fork 或任何类似的事情。

3)从开发团队的角度来看,可以说所有正在使用的gem都必须打包并位于应用程序本地。你不必担心开发人员安装不同的版本,接触他们的环境等。这个原因在我看来有点弱,但我已经看到过这种逻辑一两次。

最后,除非你有一个正在积极寻找这种能力的用例,否则我会远离它。