【问题标题】:RVM and automatically switching gemsetsRVM 和自动切换 gemsets
【发布时间】:2025-12-23 19:15:11
【问题描述】:

是否可以让 rvm 在某个目录下导航时知道它应该使用哪个 gemset,就像您可以通过在该目录下导航来获取当前分支的信息一样?

我了解 git 是如何工作的,因为每个目录在根目录中都有自己的 .git 目录,但我不知道这是否可能,因为 .rvm 更多的是用户范围的配置。或者答案可能是在每个目录中创建一个 .rvm 文件?

【问题讨论】:

  • 自从这个问题首次提出以来,情况可能已经发生了变化。 rvm docs 似乎表明.rvmrc 可能不是解决此问题的最佳方法,因为.versions.conf.ruby-version.ruby-gemset 存在的目的基本相同。

标签: ruby rvm


【解决方案1】:

对于访问这里的其他人,有一种新方法可以做到这一点,而无需允许在 .rvmrc 文件中执行任意 shell 脚本。

创建一个名为 .ruby-gemset 的文件,其中仅包含 gemset 名称。

gemset

需要最新版本的 rvm 才能正常工作。

您还可以通过创建一个名为 .ruby-version 的文件来指定 ruby​​ 版本,该文件仅包含 ruby​​ 版本:

1.9.3

这种格式还具有兼容rbenvrbfu的优点。

如果您有使用已弃用 .rvmrc 的现有项目,您可以使用以下命令将它们转换为新格式:

rvm rvmrc to .ruby-version

【讨论】:

  • 这个答案可能需要一些清理,它的当前状态令人困惑。你的意思是,创建一个名为 .ruby-gemset 的文件并让它只包含gemset my_gemset_name? .ruby-version 也是一样,是否只包含1.9.3
  • 如上所述,.ruby-gemset 应该只包含 gemset 名称,而 .ruby-version 应该只包含 ruby​​ 版本
  • 当我 cd 进入目录时,我没有任何反应,我完全按照指示进行。我错过了什么吗?
【解决方案2】:

在每个项目/分支中创建一个.rvmrc 文件,内容与此类似:

rvm gemset use xxxx

保存它。下次您将cd 放入该文件夹时,您可能会收到来自 RVM 的安全提示,以确保您要使用该.rvmrc。接受后,每次导航到该文件夹​​时,您都会看到“Now using gemset 'xxxx'”。

【讨论】:

  • 是的,我做到了,但它不能正常工作 - 每次我进入项目文件夹时,我都会收到通知(终端中的绿色)该项目正在使用 ruby​​ 的 x.x.x 版本,但是当我想做一些我有错误的事情(不同的范围错误:从活动记录到使用的 gem 等) - 但是当我输入 rvm 时使用 x.x.x (与进入项目文件夹通知后的相同版本)一切正常 - 你知道如何解决这个? ://
  • 这是旧的做事方式。新方法是使用.ruby-version.ruby-gemset 文件。两者都必须在场。请参阅下面@Yule 的回答。
  • @DylanMarkow:好的,cd 很好用,因为 .. cd。但是如何在其他脚本语言中通过 chdir 运行 rvm? chdir 到带有 .ruby-version 和 .ruby-gemset 的目录不允许自动加载 gemsets
【解决方案3】:

我发现最简单的方法是导航到项目文件夹,然后使用以下命令:

rvm --rvmrc --create <ruby>@<desired-gemset-name>

例如rvm --rvmrc --create 1.9.2-p290@testing_gemset

RVM 将一次性创建 .rvmrc 文件,填充它,安装正确的 ruby​​ 版本 - 如果需要 - 并且(通常)切换到正确的 ruby​​ 版本和 gemset。我说通常是因为我发现有时我必须在执行该命令后cd . 才能让 RVM 接受更改。

【讨论】:

    【解决方案4】:

    在项目文件夹中创建一个包含 [ruby version]@[gemset] 内容的 .ruby-version 文件。

    例子:

    $ rvm gemset list
    
        gemsets for ruby-2.6.3 (found in /home/ec2-user/.rvm/gems/ruby-2.6.3)
           (default)
           hello
        => sample
           toy
    
    $ echo "2.6.3@sample" > .ruby-version
    

    【讨论】:

      【解决方案5】:

      如果您无法让 .ruby-version / .ruby-gemset 工作,请考虑您的终端是否使用 shell 登录并尝试在http://rvm.io/support/faq 的 shell 部分运行命令:

      $ rvm get [head|stable] --auto
      

      【讨论】:

        【解决方案6】:

        有可能:http://rvm.io/workflow/rvmrc/:

        rvm use ruby@gemset
        

        【讨论】: