在VS Code调试器中,RVM无法正常工作

11
我在工作中使用RVM来管理Ruby版本。我们有两个Rails仓库,一个是桌面版,另一个是移动版。桌面版使用Ruby 2.2.4,而移动版使用2.2.2。
我知道RVM具有自动切换指定在Gemfile中的适当Ruby版本的功能(在我们的情况下,在两个Gemfile中都指定了)。现在,当我使用默认终端并在单个项目根目录内运行“ruby -v”命令时,它会显示相应的版本。但是当我在VS终端中执行相同的操作时,它会显示默认版本,即2.2.4。
我的主要问题是Rails调试器在我尝试使用VS调试器时给出以下错误:Your Ruby version is 2.2.4, but your Gemfile specified 2.2.2,我怀疑这是因为我上述提到的原因导致的。
这是否是问题所在,还是另有不同?请提供任何问题的解决方案。
6个回答

15

解决了版本问题。原来如果你通过GUI打开VS Code,那么VS Code会使用默认版本的Ruby。但是如果你通过CLI进入项目目录并输入code .,它将使用Gemfile中指定的版本。

我的猜测是,当你cd进入项目目录时,RVM会进行Ruby版本切换,因此由同一进程创建的VS Code实例使用了已切换的版本。注意:我对Linux进程不太了解,如有错误请指正。


这非常有帮助。如果有人知道如何在VS Code打开的GUI窗口内切换gemset,请也发布一个答案。 - Tashows
这很有道理,但这正是我所做的一切,而在 vscode 中运行的所有与 Ruby 相关的内容都使用 /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/。我不知道为什么。 - user24601

5

使用rvm,你有两个选择:

  1. 使用code .命令从终端打开工作区,这会确保适当的路径被设置。但是,当你从UI打开另一个工作区时,适当的路径不会被设置。
  2. launch.json内自己设置路径,如下所示:
{
    "name": "Rails server",
    "type": "Ruby",
    "request": "launch",
    "program": "${workspaceRoot}/bin/rails",
    "env": {
        "PATH": "",
        "GEM_HOME": "",
        "GEM_PATH": "",
        "RUBY_VERSION": "ruby-2.5.3"
    },
    "args": [
        "server"
    ]
}

这两种解决方案都很繁琐,我建议卸载rvm并改用rbenv来管理ruby版本。

使用rbenv,您无需指定路径,可以直接从UI打开您的工作区 - 正确的ruby版本和路径将始终设置。改用rbenv后,我之前使用rubocop和solargraph扩展程序时遇到的其他问题也得到了解决。

关于使用rbenv代替rvm的其他好处的有趣文章: https://dev.to/krtb/why-and-how-i-replaced-rvm-with-rbenv-23ad


1

ruby解释器的命令路径有一个设置,默认为"ruby"。我刚开始使用vscode,但可能可以使用vscode变量插值到rvm命令,并将ruby解释器的值设置为rvm结果。

有人使用过https://github.com/ngetahun/vscode-rvm吗?


1
这是答案还是额外的问题? - Alexey Novakov

1

以下是工作内容

settings.json:

{
    "terminal.integrated.profiles.linux": {
        "bash": {
            "path": "bash",
            "icon": "terminal-bash",
            "args": ["--login"]         // <--- Enables RVM at the terminal in VSCODE
        }
    }
}

.bash_profile:

...

# This activates current Ruby version in terminal as RVM triggers 
# versions by command CD, but VSCODE opens terminal already in work directory
cd .

launch.json:

{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "rdbg",
            "name": "Debug current file with rdbg",
            "request": "launch",
            "command": "bin/rails",    // <--- Rails instead of default Ruby
            "script": "server",
            "args": [],
            "askParameters": false,
            "useTerminal": true    // <--- Opens bash terminal instead of Debug Console
        }
    ]
}

在此之后,您可以使用配置“使用rdbg调试当前文件”和正确的RVM环境开始并调试Rails应用程序。


0

0

您可以在终端项目文件夹中键入此代码,以获取精确的“env”配置,然后将结果粘贴到launch.json中。

printf "\n\"env\": {\n  \"PATH\": \"$PATH\",\n  \"GEM_HOME\": \"$GEM_HOME\",\n  \"GEM_PATH\": \"$GEM_PATH\",\n  \"RUBY_VERSION\": \"$RUBY_VERSION\"\n}\n\n"

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