任务未选择正确的Ruby版本的问题

wvyml7n5  于 2023-08-04  发布在  Ruby
关注(0)|答案(3)|浏览(105)

这个问题取决于我正在做的Ruby项目。VSCode任务通常不能从正确的rbenv shimmed Ruby版本运行。有时,如果我先从集成终端手动运行一个命令,然后运行Code任务,它会选择正确的Ruby。
示例VSCode任务,

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "Run All Tests",
      "type": "shell",
      "command": "bin/rails test",
      "group": "test",
      "presentation": {
        "reveal": "always",
        "panel": "shared"
      }
    }
  ]
}

字符串
当从项目目录中启动代码时(或任何其他方式),如果我运行这个任务,它将从系统ruby的上下文中运行。但是,如果我打开集成终端并输入bin/rails test(可以工作),然后再次运行该任务,它将在正确的rbenv shimmed ruby上下文中运行。
然而,在适当的Ruby上下文中启动调试器会话确实可以工作,所以我真的不明白错过了什么。

ou6hu8tu

ou6hu8tu1#

这个答案将使任务工作,但它没有解决VS代码的潜在问题。这可能需要在他们的GitHub repo上发布一个问题。
如果你在Mac上,这个命令会在你的路径中放置一个rbenv符号链接,链接到rbenv版本。Rbenv(以及大多数应用程序)只在shell环境中更改路径(.bash_profile只在bash中更改路径)。此命令会将其添加到路径中,而不管您运行的是什么shell。

ln -s "/Users/$(whoami)/.rbenv/shims/ruby" /usr/local/bin/ruby

字符串
我猜测VS Code实际上并没有使用shell环境,而是直接调用可执行文件。

t5fffqht

t5fffqht2#

一个选项是将以下配置添加到VSCode settings.json中,以使其启动的shell在执行任务之前选择您的shell环境。这里我使用的是zsh,我的环境配置为选择正确的ruby,然后任务将识别:

"terminal.integrated.profiles.osx": { "zsh": { "path": "/bin/zsh", "args": ["-l", "-i"] } }

字符串

dw1jzc5e

dw1jzc5e3#

在Visual Studio Code解决了似乎是一个bug或缺少的配置设置,或者至少是缺少的文档之前,我已经采取了在任务的command属性上设置PATH变量的方法。
例如,如果我感兴趣使用的ruby位于/full/path/to/bin/ruby,我将/full/path/to/bin前置到PATH环境变量。
举例来说:

.vscode/tasks.json

{
    "version": "2.0.0",
    "tasks": [
    {
        "label": "sidekiq",
        "type": "shell",
        "command": "export PATH=/full/path/to/bin:$PATH && bundle exec sidekiq -C config/sidekiq.yml",
        "presentation": {
            "reveal": "always",
            "panel": "dedicated"
        },
        "runOptions": {
            "runOn": "folderOpen"
        }
    }]
}

字符串

相关问题