bundle和gem install有什么区别?

51

我很确定这是一个非常基础的问题,但作为 RoR 新手,我想了解为什么有时候我会使用 bundle install (它会从 Gemfile 中安装所有 Gems 和它们的依赖项),而另一些时候我会使用 gem install [gemname]?

两者之间的根本区别是什么,什么情况下我会更喜欢使用 gem install 而不是 bundle install?

谢谢! Rog


9
谢谢你的询问。编程教程中经常混淆术语,让我感到很困惑。 - andy
2个回答

36

我会说:默认情况下在您的本地计算机上没有特别的区别,但是...

bundle install 的目的是为包含 Gemfile 的应用程序设置一切。 您甚至可以传递参数,以使需要安装的宝石安装在任何您想要的文件夹中。

这样,在生产环境中,您拥有明确分离的应用程序和它们自己的宝石。

另一方面,gem install gmaps4rails轻松广告)将该宝石安装到您整个环境中。


8
根据你所说的,我可以这样说:rubygem 是用于机器的 Ruby 依赖项管理器,而 bundler 则是用于 Ruby 应用程序的 Ruby 依赖项管理器? :) - Roy Lee

7
我曾认为将gem添加到gemfile并运行'bundle install'与运行'gem install x'没有区别。我认为这类似于'yarn add package'与将 package 添加到 package.json 然后运行 'yarn'。但是,在尝试为rails设置chamber gem时,我注意到只有在运行'gem install chamber'之后,我才能使用chamber命令的'chamber init'功能。之前,当我只是将其添加到gemfile并运行bundle install时,在终端中运行'chamber init'会让我收到“unknown command chamber”错误。看起来,运行'gem install'似乎将其添加到全局可用的gems(因此终端可以运行软件包的命令),而将其添加到gemfile并运行bundle install仅将其添加到应用程序中,类似于npm install --global。

7
你需要使用项目版本的 gem(在 Gemfile 中)来运行相同的命令,要想做到这一点,你需要运行 bundle exec chamber init。基本上就是这样。 - Rog

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接