[RUBY] [Visual Studio Code] Beim Ausführen des Debugs bei Verwendung von rbenv wird ein Syntaxfehler angezeigt

Umgebung

Artikel Ausführung
OS Mac Catalina 10.15.6
Visual Studio Code 1.49.0
Ruby 2.7.1

Ich habe rbenv für die Ruby-Versionskontrolle verwendet

Annahme

Die zum Debuggen benötigten Edelsteine wurden der Gemfile hinzugefügt und waren bereits installiert

gem "ruby-debug-ide"
gem "debase"

Error

Wählen Sie auf der linken Seite des Visual Studio-Codes Ausführen aus und wählen Sie Nur Konfiguration hinzufügen> RSpec - Aktive Spezifikationsdatei

Beim Debuggen mit den obigen Einstellungen blieb die Statusleiste am unteren Bildschirmrand orange, um anzuzeigen, dass sie ausgeführt wurde, und es wurden keine Fortschritte erzielt.

ReRun gibt den folgenden Fehler an die Ansicht [OUTPUT] aus, wie unten gezeigt.

Uncaught exception: /Users/pldb/.rbenv/shims/rspec:3: syntax error, unexpected tSTRING_BEG, expecting do or '{' or '('
[ -n "$RBENV_DEBUG" ] && set -x
     ^
/Users/pldb/.rbenv/shims/rspec:3: syntax error, unexpected ']', expecting end-of-input
[ -n "$RBENV_DEBUG" ] && set -x
                    ^

/Users/pldb/.rbenv/versions/2.6.6/bin/rdebug-ide:23:in `load': /Users/pldb/.rbenv/shims/rspec:3: syntax error, unexpected tSTRING_BEG, expecting do or '{' or '(' (SyntaxError)
[ -n "$RBENV_DEBUG" ] && set -x
     ^
/Users/pldb/.rbenv/shims/rspec:3: syntax error, unexpected ']', expecting end-of-input
[ -n "$RBENV_DEBUG" ] && set -x
                    ^
	from /Users/pldb/.rbenv/versions/2.6.6/bin/rdebug-ide:23:in `<main>'

Ergebnis

.Vscode / launch.json wurde wie folgt geändert

** Vorher ändern **

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "RSpec - active spec file only",
      "type": "Ruby",
      "request": "launch",
      "program": "/Users/pldb/.rbenv/shims/rspec",
      "args": [
        "-I",
        "${workspaceRoot}",
        "${file}"
      ]
    }
  ]
}

** Nach der veränderung **

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "RSpec - active spec file only",
      "type": "Ruby",
      "request": "launch",
      "program": "${workspaceRoot}/bin/rspec",
      "args": [
        "-I",
        "${workspaceRoot}",
        "${file}"
      ]
    }
  ]
}

Dies ist die Standardeinstellung von Visual Studio Code Ich habe jedoch binstub verwendet

Ursache

Das "Programm" zum Zeitpunkt der Generierung von launch.json war "$ {workspaceRoot} / bin / rspec"

Ich dachte jedoch, dass der Pfad von rspec korrekt war und ersetzte ihn durch den folgenden Pfad

% which rspec
/Users/pldb/.rbenv/shims/rspec

Der Titelfehler wurde dadurch verursacht

Referenz: rspec wird nicht als Programm ausgeführt, sondern als Codedatei analysiert.

Dies ist der Inhalt der Rspec unter Shims, auf den tatsächlich verwiesen wurde

#!/usr/bin/env bash
set -e
[ -n "$RBENV_DEBUG" ] && set -x

program="${0##*/}"
if [ "$program" = "ruby" ]; then
  for arg; do
    case "$arg" in
    -e* | -- ) break ;;
    */* )
      if [ -f "$arg" ]; then
        export RBENV_DIR="${arg%/*}"
        break
      fi
      ;;
    esac
  done
fi

export RBENV_ROOT="/Users/pldb/.rbenv"
exec "/usr/local/Cellar/rbenv/1.1.2/libexec/rbenv" exec "$program" "$@"

Dies ist eine von rbenv generierte Bash-Datei (zum Verweisen auf rspec), deren Lesen zu einem Fehler führte. Mit anderen Worten, es lag daran, dass ich rspec nicht vollständig verstanden habe.

Gegenmaßnahmen

Verwenden Sie binstub

Referenz: [Übersetzung + Erklärung] binstub verstehen: Verhalten von RubyGems, rbenv, bundler

Generieren Sie $ {workspaceRoot} / bin / rspec in binstub, um es zur rspec zu machen, die in Ihrem Projekt verwendet werden soll

$ {workspaceRoot} zeigt auf einen Ordner in dem mit Visual Studio Code extrahierten Verzeichnis

Gehen Sie in dieses Verzeichnis und gehen Sie wie folgt vor

% bundle binstubs rspec-core
% ./bin/rspec -v
RSpec 3.9
  - rspec-core 3.9.2
  - rspec-expectations 3.9.2
  - rspec-mocks 3.9.1
  - rspec-support 3.9.3

Jetzt können Sie mit den Standardeinstellungen ausführen

Vermeiden Sie Bin-Ordner (um andere Mitwirkende nicht zu beeinträchtigen), wenn Sie einen Edelstein erstellen

% bundle binstubs rspec-core --path exe
% ./exe/rspec -v
RSpec 3.9
  - rspec-core 3.9.2
  - rspec-expectations 3.9.2
  - rspec-mocks 3.9.1
  - rspec-support 3.9.3

In diesem Fall lautet der Pfad von "program" in launch.json "$ {workspaceRoot} / exe / rspec"

Verbleibend

Wenn Sie sich nicht für die Version von rspec in Ihrem Projekt interessieren, funktioniert dies auch dann, wenn Sie / usr / local / bin / rsepc wie folgt angeben:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "RSpec - active spec file only",
      "type": "Ruby",
      "request": "launch",
      "program": "/usr/local/bin/rspec",
      "args": [
        "-I",
        "${workspaceRoot}",
        "${file}"
      ]
    }
  ]
}

Und das ist eine andere Sache, aber ich werde eine andere Sache über das Setzen von launch.json behandeln. In gemspec ist ein Codierungsfehler aufgetreten

Uncaught exception: 
[!] There was an error parsing `Gemfile`: 
[!] There was an error while loading `xxx.gemspec`: invalid byte sequence in US-ASCII. Bundler cannot continue.

Wie Sie sehen können, liegt dies an den Codierungseinstellungen

Referenz: Codierungsproblem bei Verwendung von gem'xcodeproj '

Die Datei launch.json beim Debuggen während der Edelsteinentwicklung sieht schließlich so aus:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "RSpec - active spec file only",
      "type": "Ruby",
      "request": "launch",
      "program": "${workspaceRoot}/exe/rspec",
      "args": [
        "-I",
        "${workspaceRoot}",
        "${file}"
      ],
      "env": {
        "LANG": "en_US.UTF-8",
        "LC_COLLATE": "en_US.UTF-8",
        "LC_CTYPE": "en_US.UTF-8",
        "LC_MESSAGES": "en_US.UTF-8",
        "LC_MONETARY": "en_US.UTF-8",
        "LC_NUMERIC": "en_US.UTF-8",
        "LC_TIME": "en_US.UTF-8",
        "LC_ALL": "en_US.UTF-8"
      }
    }
  ]
}

Recommended Posts

[Visual Studio Code] Beim Ausführen des Debugs bei Verwendung von rbenv wird ein Syntaxfehler angezeigt
Beim Hinzufügen einer Abhängigkeit wird eine Fehlermeldung angezeigt
Ein Hinweis zu "Stellen Sie mit einem selbstsignierten Zertifikat mit Javas Keytool keinen Zertifikatfehler aus"
Beim Testen der Formularauthentifizierung mit Spring Security tritt ein 404-Fehler auf
Ich erhalte einen Ruby-Versionsfehler, wenn ich versuche, Rails zu starten.
Ich habe eine Frage. Beim Abspielen eines Videos in Listview mit Android tritt ein Fehler auf.
Erste Schritte mit Java-Programmen mit Visual Studio Code
Ich konnte in Ubuntu20.04 + Visual Studio Code kein Japanisch eingeben
Warum können Sie Java mit Visual Studio Code entwickeln?
Ich habe keine Möglichkeit gefunden, den Fehlercode abzurufen, als ich eine Ausnahme unter Android erhalten habe
Bei der Verwendung von nextInt, nextLine und substring ist ein Fehler aufgetreten.
Die in den Einstellungen von Visual Studio Code definierte Variable java.home verweist auf einen fehlenden oder unzugänglichen Ordner (C: avadk-13.0.1).
Java mit Visual Studio Code
Fehler bei der Verwendung von Schienen Capybara
Was ich aus Java gelernt habe, funktioniert mit Visual Studio Code
Vermeiden Sie Zeichencodefehler in Java, wenn Sie die VScode-Erweiterung RUN-CODE verwenden