我正在使用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
。而且我怀疑这是由于我上面提到的任何原因。
是这种情况还是另外一个问题?还要提供解决问题的方法。
答案 0 :(得分:1)
ruby解释器的命令路径有一个设置,默认为“ ruby”。我只是进入vscode,但是可能可以在rvm命令中使用vscode变量插值,并将Ruby解释器值设置为rvm结果。
答案 1 :(得分:0)
找到了版本问题的解决方案。事实证明,如果通过GUI打开VS Code,则VS Code使用默认版本的Ruby。但是,如果通过CLI进入项目目录,然后键入code .
来打开它,它将与Gemfile中指定的版本一起使用。
我的猜测是,当您cd
进入项目目录时,RVM会执行Ruby版本切换,并且由于VS Code的实例是由与切换相同的过程创建的,因此VS Code使用该版本。 注意::我对Linux进程了解不多,所以如果我错了,请随时纠正我。
答案 2 :(得分:0)
对于 rvm
,您有两个选择:
code .
命令从终端打开工作区。这可确保设置适当的路径。但是当您从 UI 打开另一个工作区时,将不会设置适当的路径。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 扩展时遇到的其他 vscode 问题。
关于将 rvm
替换为 rbenv
的其他好处的有趣文章:
https://dev.to/krtb/why-and-how-i-replaced-rvm-with-rbenv-23ad