Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 轨道3';s";“捆绑安装”;及;捆绑安装--部署“;除了第二个使用更多的磁盘空间外,这两个都可以正常工作?_Ruby On Rails_Ruby On Rails 3_Bundler - Fatal编程技术网

Ruby on rails 轨道3';s";“捆绑安装”;及;捆绑安装--部署“;除了第二个使用更多的磁盘空间外,这两个都可以正常工作?

Ruby on rails 轨道3';s";“捆绑安装”;及;捆绑安装--部署“;除了第二个使用更多的磁盘空间外,这两个都可以正常工作?,ruby-on-rails,ruby-on-rails-3,bundler,Ruby On Rails,Ruby On Rails 3,Bundler,似乎在开发机器上(如Macbook上),如果我们使用bundle install--deployment,所有gem都将安装到vendor/bundle文件夹中,如果我们有多个Rails 3项目(有些项目只是为了测试Rails 3),它只会占用更多的磁盘空间。如果它不是--deployment,那么gems将位于“generic”文件夹中,而不是项目文件夹中,因此可以跨项目共享。这是真的吗 另一件事是,我们是否需要将vendor/bundle下的所有文件添加到存储库并推送它?似乎如果我们这样做,

似乎在开发机器上(如Macbook上),如果我们使用
bundle install--deployment
,所有gem都将安装到
vendor/bundle
文件夹中,如果我们有多个Rails 3项目(有些项目只是为了测试Rails 3),它只会占用更多的磁盘空间。如果它不是
--deployment
,那么gems将位于“generic”文件夹中,而不是项目文件夹中,因此可以跨项目共享。这是真的吗

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

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

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

第二,如果你想破解gems中的实际代码,你可以在不影响系统gems的情况下在你的供应商副本上这样做。您所做的更改只会影响您正在使用的应用程序

这种销售方法过去还有另一个用途,那就是确保您使用的是特定版本的gem,即使系统gem升级到更高版本会破坏您的应用程序,您的应用程序也会继续工作。然而,Bundler本身使这个用例大部分过时,因为它自动安装和引用特定版本的gems

是的,自动售货机会使你的应用程序代码膨胀
Gemfile.lock
只是所需gem的列表。如果你出售你的宝石,它们会被尽全力复制到你的应用程序中


因此,我建议您不要出售您的gems(这也意味着不要使用
--deployment
标志),除非您有上述原因之一。

我认为,只要repo允许您忽略文件,那么供应商/捆绑包不会影响repo。

您可以忽略它(如果您使用的是git,请将路径添加到
.gitignore
),并且在服务器上有一个符号链接,可以通过多个修订版共享gems。

那么是否应将文件夹
供应商/捆绑包
添加到repo?有人说,如果那里的文件包含二进制文件,那么如果Peter使用Mac,Tom使用Linux(或者如果部署机器是Linux),系统就会崩溃。我们应该使用
bundle包
,然后使用
bundle安装--local
吗?我们应该将它们添加到repo吗?通常不应该。不要出售gems(除非您想更改它们或者部署机不允许您在其中运行
bundle安装
),更不用说添加到repo了。这是一种浪费空间的行为,如果每个人都像你说的那样使用不同的系统,就会造成麻烦。我希望看到另一个关于“bundle-package”使用的简洁明了的答案。什么时候应该使用“bundle package”?bundle install--deployment等同于
bundle install--path vendor/bundle