Rails 3的"捆绑安装"和"捆绑安装 - 部署"都运行良好,除了第二个只使用更多的磁盘空间?

nop*_*ole 14 ruby-on-rails bundler ruby-on-rails-3

似乎在开发机器上(比如在Macbook上),如果我们使用bundle install --deployment,所有的宝石都将安装到vendor/bundle文件夹中,如果我们有多个Rails 3项目(一些项目仅用于测试Rails 3),它只使用更多的磁盘空间.如果不是--deployment,则gems将位于"generic"文件夹中而不是项目文件夹内,因此可以跨项目共享.这是真的?

另一件事是,我们是否需要将所有文件添加vendor/bundle到我们的存储库并推送它?似乎如果我们这样做,我们只是堵塞了回购,因为如果我们不这样做,所有适当的宝石将通过bundle install使用Gemfile.lock无论如何指定的所有宝石来安装.(这Gemfile.lock是回购中的一个小文件).这也是真的吗?

edg*_*ner 37

是! 真正.

当您使用该--deployment标志时,Bundler会确保您需要的每个宝石都被出售,即它们被复制到应用程序文件夹结构的预定位置(按照vendor/bundle惯例恰好在Rails中)这对两件事情有好处.

首先,如果您的权限有限,无法在部署计算机中安装gem,那么请让您拥有应用程序中所需的所有宝石.

其次,如果你想要破解宝石中的实际代码,你可以在你的销售副本上这样做,而不会影响系统宝石.您所做的更改只会影响您正在处理的应用程序.

这种销售方法曾经有另一种用途,即确保您使用特定版本的gem,即使系统宝石升级到更高版本会破坏您的应用程序,您的应用程序也会继续工作.但是,Bundler本身使这个用例大多已经过时,因为它自动安装和引用特定版本的gem.

是的,vendoring会使应用程序的代码膨胀.Gemfile.lock只是所需宝石的列表.如果您提供宝石,他们会尽全力复制到您的应用中.

因此,我建议您不要提供宝石(这也意味着不要使用--deployment标志),除非您有上述原因之一.