【问题标题】:Does 'bundle install' install all the required gems on my computer permanently?“捆绑安装”是否会在我的计算机上永久安装所有必需的 gem?
【发布时间】:2014-08-06 00:48:19
【问题描述】:

我是 Rails 新手,正在学习 bundler。我知道bundle install 会安装 gemfile 中指定的所有 gem,但是它将它们安装到哪里?

它是否将它们永久安装在我的计算机上,以便将来的任何项目都可以使用它们?

如果是这样,这是否意味着我的计算机充满了随机 gem 版本和 gem 安装,我需要一个示例项目但可能永远不会再次使用?

【问题讨论】:

    标签: ruby-on-rails gem rubygems bundler


    【解决方案1】:

    默认情况下,bundle install 将安装在根级别,因此计算机上的所有用户都可以访问 gem。所以“是的”它是永久性的(至少与您的应用程序无关,您可以随时删除它们)。

    看看man pages for bundler。在这里,您会注意到您可以指定安装到本地目录。

    将您的依赖项,甚至是已安装到系统 gem 中的 gem,安装到系统 gem 以外的位置 存储库。在这种情况下,请将它们安装到供应商/捆绑包。

    $ bundle install --path vendor/bundle

    更多捆绑命令或对 Bundler.setup 或 Bundler.require 的调用 会记住这个位置。

    这将允许您将 gem 安装到您的应用程序内部的位置。因此,当您删除示例应用程序时,您也会删除关联的 gem。

    另外,如果您想查看特定 gem 的安装位置(比如您想查看其源代码),请输入 bundle show <gemname>。这将吐出通往该宝石的路径。

    【讨论】:

    • 安装到供应商/捆绑包有一些缺点。例如,在具有大量 gem 的项目中,它可能会显着增加部署时间。或者,在服务器使用与开发机器不同的技术的情况下,可能会导致本地编译的 gem 失败。这些问题可以通过仔细的部署脚本来消除,但值得知道它们的存在。
    【解决方案2】:

    简短的回答是“是”。更长的答案是,有一些技术可以减少或消除与这种影响相关的问题。

    如果您安装“RVM”:

    https://rvm.io/

    这将允许您安装多个版本的 Ruby 并创建单独的“gemset”。当您进入包含项目的目录时,ruby 版本和 gemset 设置会自动获取,并且活动的 Ruby 版本将更改。通过这种方式,您可以在项目之间保持 gem 分离 - 并一次使用多个 Ruby 版本,包括 JRuby 和其他深奥的版本。

    要找出宝石的存储位置,请输入:

    gem environment

    进入您的命令行并在响应中查找 INSTALLATION_DIRECTORY 条目。

    【讨论】:

    • 不要在适当的位置编辑 gem,就好像你将你的 rails 项目移动到其他地方一样,这些更改将会丢失。因此,找出它们的位置并非易事。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多