我使用 RVM 在基于 Mac 的开发环境中更改 Ruby 版本。

在 Visual Studio Code 中,当我打开一个常规的终端选项卡时,我进入了一个带有 -l 的 bash 登录 shell。选项,按照标准的默认配置,如 documented here :

// VSCode default settings 
{ 
  "terminal.integrated.shell.osx": "/bin/bash", 
  "terminal.integrated.shellArgs.osx": [ 
    "-l" 
  ] 
} 

默认情况下,从 VSCode 终端手动执行的 RVM 命令为我提供了该项目的预期 ruby​​ 版本。
$ rvm list 
  ruby-2.0.0-p648 [ x86_64 ] 
  ruby-2.1.10 [ x86_64 ] 
  ruby-2.1.5 [ x86_64 ] 
  ruby-2.2.10 [ x86_64 ] 
  ruby-2.2.5 [ x86_64 ] 
  ruby-2.3.0 [ x86_64 ] 
* ruby-2.3.1 [ x86_64 ] 
=> ruby-2.3.7 [ x86_64 ] 
 
# => - current 
# =* - current && default 
#  * - default 

但是,当我设置 .vscode/tasks.json 时文件来执行相同的命令,Ruby 版本不是正确的版本,而是系统上的默认版本。此外,我无法实际使用 rvm use切换版本(见下面的错误信息)
{ 
  // See https://go.microsoft.com/fwlink/?LinkId=733558 
  // for the documentation about the tasks.json format 
  "version": "2.0.0", 
  "tasks": [ 
    { 
      "label": "Check for RVM", 
      "type": "shell", 
      "command": "rvm list && rvm use 2.3.7", 
      "group": { 
        "kind": "test", 
        "isDefault": true 
      } 
    } 
  } 
} 

任务执行的输出,带有关于没有正确登录 shell 的错误消息。
> Executing task: rvm list && rvm use 2.3.7 < 
 
  ruby-2.0.0-p648 [ x86_64 ] 
  ruby-2.1.10 [ x86_64 ] 
  ruby-2.1.5 [ x86_64 ] 
  ruby-2.2.10 [ x86_64 ] 
  ruby-2.2.5 [ x86_64 ] 
  ruby-2.3.0 [ x86_64 ] 
=* ruby-2.3.1 [ x86_64 ] 
  ruby-2.3.7 [ x86_64 ] 
 
# => - current 
# =* - current && default 
#  * - default 
 
 
RVM is not a function, selecting rubies with 'rvm use ...' will not work. 
 
You need to change your terminal emulator preferences to allow login shell. 
Sometimes it is required to use `/bin/bash --login` as the command. 
Please visit https://rvm.io/integration/gnome-terminal/ for an example. 
 
 
Terminal will be reused by tasks, press any key to close it. 

我什至尝试专门添加 -l bash 命令选项作为任务配置中的参数,但这不起作用。
  "options": { 
    "shell": { 
      "args": "-l" 
    } 
  } 

我的理解,通读后 this issue是不是终端 shell 配置和任务 shell 配置是一回事,那么终端 shell 和任务 shell 之间是否存在其他一些我遗漏的潜在不一致?如果不是,那么 RVM 是什么阻止它在任务 shell 内工作?

请您参考如下方法:

RVM 覆盖“cd”命令以检测 .ruby-version 和 .ruby-gemset 文件并自动设置您的环境。新启动的 vscode 终端不会触发它。它只使用 vscode 启动时的默认或当前设置,而不是你在 .ruby* 文件中定义的。

所以我通常运行cd $PWD在 vscode 中启动新终端时。

在tasks.json中定义rake任务时,我的命令行是这样的:

    { 
        "label": "rake db:migrate", 
        "type": "shell", 
        "command": "cd $PWD; rake db:migrate", 
        "problemMatcher": [] 
    }, 

请注意 cd $PWD前置到命令行,以 Hook 到 rvm。

很乱但到目前为止它对我有用。

我怀疑这种对 rvm/.ruby-gemset/.ruby-version 的不了解也阻止了 vscode 自动检测 Ruby 插件应该执行的 rake 任务,正如这里提到的 https://medium.com/hack-visual-studio-code/rake-task-auto-detection-in-vscode-ce548488755e .因此,我想通过 vscode 任务运行的任何 rake 任务都必须由我以这种方式手动定义。

希望这可以帮助。


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!