【问题标题】:rbenv or bundler gemset sandboxing?rbenv 或 bundler gemset 沙盒?
【发布时间】:2012-02-10 13:13:20
【问题描述】:

rbenv 文档指出,如果您不使用 bundler,您可以使用 gemsets 插件来沙箱化您的 gem:

Manage gemsets. Bundler is a better way to manage application dependencies. If you have projects that are not yet using  Bundler you can install the rbenv-gemset plugin.

但是,我正在使用捆绑程序,当我在具有不同 gemset 的项目之间切换时,我需要重新捆绑。当我使用 rvm 时,由于 .gemsets 文件,这很简单。

捆绑器中是否有我不知道或我误解了文档的沙盒功能?

【问题讨论】:

    标签: ruby bundler rbenv


    【解决方案1】:

    bundler 在本质上使用GemfileGemfile.lock 文件为您通过前缀为bundle exec 的命令访问的特定项目创建一个“gemset”

    【讨论】:

    • 但是,如果我在都使用捆绑器 gemfile 的项目之间进行更改,我将拥有一大堆与我当前项目无关的 gem。所以捆绑器 gemset 不等同于 gemset 沙箱
    • 但您也不会无缘无故地在同一台机器上的多个 gemset 中安装重复的 gem。它有什么害处?无论如何,使用 bundler 和 bundle exec 不会让您访问那些“其他”宝石
    • @Coderama 即使使用沙盒,每次您需要升级 Gemfile 中的 gem 时,都会有未使用的旧 gem。我想有人可以编写一个清理脚本来使用当前的 Gemfile.lock 清理当前的沙箱......但是为什么要麻烦呢?
    • 我同意 Coderama。我不想在旧应用程序的环境中安装新的 gem。 RVM 的 gemset 功能非常有用。
    【解决方案2】:

    这可能与 rbevn 使用垫片的方式有关。你可能想签出 https://github.com/carsomyr/rbenv-bundler

    【讨论】:

      【解决方案3】:

      我发现了这个清晰、有据可查的解决方案:

      Setting up and installing rbenv, ruby-build, rubies, rbenv-gemset, and bundler

      现在,当您进行 gem install(参见下面的“Bundler”部分)时,它会转到您的 helloset gem 区域。

      您可以将多个 gemset 与它结合使用。

      此设置的最大好处是使每个项目都可以使用一组不同的不同版本的 gem。

      阅读标题为Enable RVM-style “gemsets” (optional)的部分。

      它为 gemsets 使用 rbenv 插件:https://github.com/jamis/rbenv-gemset

      2012 年 8 月 12 日更新
      我正在使用它来管理两个具有不同 Ruby 版本的项目,以及单独的一组 gem。效果很好。

      【讨论】:

        【解决方案4】:

        尝试将 chgems 与 Bundler 一起使用。 chgems 就像 RubyGems 的 chroot。它生成一个新的子shell,其中PATHGEM_HOMEGEM_PATH 更新为使用$project/.gem/$ruby/$version 作为主要GEM_HOME。由于所有 gem 都安装在项目目录中,因此在项目后清理就像 rm -rf $project/ 一样简单。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-03-10
          相关资源
          最近更新 更多