【问题标题】:RVM: List all gems in current gemset ignoring global & defaultRVM:列出当前 gemset 中的所有 gem,忽略全局和默认值
【发布时间】:2012-09-06 19:41:18
【问题描述】:

在 RVM gemset 中寻找 gem list 之类的东西,但让它忽略 globaldefault gemsets 中的 gems,这样我就可以很容易地看到什么 gems位于活动 gemset 中(在活动 gemset 中)。

【问题讨论】:

    标签: rubygems gem rvm gemset


    【解决方案1】:

    对于全局:

    rvm @global do gem list
    

    对于其他宝石:

    GEM_PATH=$GEM_HOME gem list
    

    @global 是所有其他 gemset 为给定 ruby​​ 继承的 gemset,它不会为 m 本身继承,因此选择它并在其上下文中运行 gem list 是安全的。

    对于所有其他gemset,您可以使用gem list 显示来自GEM_HOMEGEM_PATH 中所有可用路径的gem,将GEM_PATH 重置为等于GEM_HOME 将只提供一个可用路径 - 那个来自GEM_HOME 所以gem list 将只显示选定gemset 中的gem,忽略所有其他gemset(此时@global,但RVM 2.0 将支持多个gemset 继承)。

    【讨论】:

    • 但是如果你为此重新分配GEM_PATH,那么你以后不需要重新设置它吗?!?
    • 不,因为它是一个命令的一部分,所以这个分配只对这个命令生效,你可以在前面加上env 以确保:env GEM_PATH=$GEM_HOME gem list
    【解决方案2】:

    最简单的方法是使用 bash 命令显示当前 gemset 目录中的目录列表

    $ ls `rvm gemdir`/gems
    

    【讨论】:

    • 有效!那里发生了什么事?我不熟悉命令行上的`
    • ls 仅列出将当前 gemset 目录作为参数的目录内容。 Gemset 目录取自 rvm gemdir 命令并附加了 /gems(这是所有 gem 文件夹所在的位置)。 8)
    • 你熟悉ls等,但没有见过使用`来包围变量?表达式?之前...
    • 反引号有助于在运行 main 之前运行封闭的命令 。并将 backticked? 命令的结果提供给 main.
    【解决方案3】:

    首先,无论何时选择任何其他 gemset,默认(无名)gemset 的内容都会变得不可见。

    如您所知,@global gemset 在当前选定的 Ruby 的所有其他 gemset 中实际上是 included

    但是,要查看除@global gemset 之外的gemset 的内容,首先执行rvm use 2.0.0@some-gemset --ignore-gemsets(或similar 用于其他Rubies)然后gem list

    类似看@global gemset 的内容,先做rvm use 2.0.0@global 然后gem list

    同样,要查看默认 gemset 的内容,请执行 rvm use 2.0.0 --ignore-gemsets 然后 gem list

    顺便说一句,您可以选择一个 gemset 作为(所谓的)default 用于新的(非登录)shell(我总是在 .bash_profile 等中为每个 Ruby 解释器分别这样做)但是那是另一种默认 gemset,而不是上面的(未命名的)默认 gemset。

    【讨论】:

    • 谢谢。我要解决的“问题”与gem update/bundle update 有关。我希望它在运行时仅更新它们当前所在的 gem 集中的 gem。我在global 中有一些宝石,在some-gemset 中有一些宝石。当我从some-gemset 运行gem update 时,它会将所有宝石(包括global)更新为some-gemset。我现在所做的,每次更新时,首先切换到global,然后切换到gem update 然后切换到some-gemset。可行,但是当您将 Gemfiles 和 Bundler 添加到组合中时,它会变得松散......
    • 更快的是(rvm use 2.0.0@some-gemset --ignore-gemsets; gem update)。对于 Bundler,它是 (rvm use 2.0.0@some-gemset --ignore-gemsets; bundle update)。但是如果你想让 Bundler 将一些(不是全部)新的 gem 安装到 @global 中,那就很难了。
    • 谢谢! :) 这解决了我的问题!已经花了将近 5 个小时。
    猜你喜欢
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多