Vscode-rust: Umgebungsvariablen an RLS übergeben

Erstellt am 1. Dez. 2017  ·  5Kommentare  ·  Quelle: rust-lang/vscode-rust

Ich habe Probleme mit Projekten, die diesel enthalten und beispielsweise Umgebungsvariablen verwenden:

pub fn establish_connection() -> SqliteConnection {
    dotenv().ok();

    let database_url = env::var("DATABASE_URL").expect("DATABASE_URL must be set");

    SqliteConnection::establish(&database_url)
        .expect(&format!("Error connecting to {}", database_url))
}

Ergibt im Ausgabefenster folgendes:

{"message":"proc-macro abgeleitet in Panik","code":null,"level":"error","spans":[{"file_name":"","byte_start":72,"byte_end":83,"line_start":3,"line_end":3,"column_start":14,"column_end":25,"is_primary":true,"text":[{ "text":"# [ derive ( InferSchema ) ] # [","highlight_start":14,"highlight_end":25}],"label":null,"suggested_replacement":null,"expansion":{"span" :{"Dateinamen":"","byte_start":72,"byte_end":83,"line_start":3,"line_end":3,"column_start":14,"column_end":25,"is_primary":false,"text":[{ "text":"# [ derive ( InferSchema ) ] # [","highlight_start":14,"highlight_end":25}],"label":null,"suggested_replacement":null,"expansion":{"span" :{"file_name":"Development/pathfinder-server/pathfinder-server/src/schema.rs","byte_start":0,"byte_end":37,"line_start":1,"line_end":1,"column_start ":1,"column_end":38,"is_primary":false,"text":[{"text":"infer_schema!("dotenv:DATABASE_URL");","highlight_start":1,"highlight_end":38 }],"label":null,"suggested_replacement":null,"expansion":null},"macro_decl_name":"infer_schema!","def_site_span":{"file_name":"","byte_start":0,"byte_end":484,"line_start":1,"line_end":11,"column_start":1,"column_end":53,"is_primary":false,"text":[{ "text":"( $ database_url : expr ) => {","highlight_start":1,"highlight_end":31},{"text":"mod __diesel_infer_schema {","highlight_start":1,"highlight_end": 28},{"text":"# [ableiten ( InferSchema ) ] # [","highlight_start":1,"highlight_end":33},{"text":"infer_schema_options ( database_url = $ database_url ) ] struct _Dummy ; } pub","highlight_start":1,"highlight_end":79},{"text":"use self :: __diesel_infer_schema :: * ; } ; (","highlight_start":1,"highlight_end":47},{"text":"$ database_url : expr , $ schema_name : expr ) => {","highlight_start":1,"highlight_end":52}, {"text":"mod __diesel_infer_schema {","highlight_start":1,"highlight_end":28},{"text":"# [ableiten ( InferSchema ) ] # [","highlight_start":1,"highlight_end" :33},{"text":"infer_schema_options (","highlight_start":1,"highlight_end":23},{"text":"database_url = $ database_url , schema_name = $ schema_name ) ] struct _Dummy","highlight_start ":1,"highlight_end":78},{"text":"; } pub use self :: __diesel_infer_schema :: * ; } ;","highlight_start":1,"highlight_end":53}],"label":null,"suggested_replacement":null,"expansion":null}}},"macro_decl_name":"#[derive(InferSchema) ]","def_site_span":null}}],"children":[{"message":"message: called Result::unwrap() on a Err value: "Failed to load environment variable DATABASE_URL: Umgebungsvariable nicht gefunden"","code":null,"level":"help","spans":[],"children":[],"rendered":null}],"rendered":"error: proc-macro ableite panickedn --> Development/pathfinder-server/pathfinder-server/src/schema.rs:1:1n |n1 | infer_schema!("dotenv:DATABASE_URL");n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ n |n = Hilfe: Nachricht: aufgerufen Result::unwrap() bei einem Err -Wert: "Fehler beim Laden der Umgebungsvariablen DATABASE_URL: Umgebungsvariable nicht gefunden"n = Hinweis: Dieser Fehler stammt von einem Makro außerhalb des aktuellen Crates (in Nightly-Builds mit -Z external -macro-backtrace für weitere Informationen)nn"}
{"message":"proc-macro abgeleitet in Panik","code":null,"level":"error","spans":[{"file_name":"","byte_start":72,"byte_end":83,"line_start":3,"line_end":3,"column_start":14,"column_end":25,"is_primary":true,"text":[{ "text":"# [ derive ( InferSchema ) ] # [","highlight_start":14,"highlight_end":25}],"label":null,"suggested_replacement":null,"expansion":{"span" :{"Dateinamen":"","byte_start":72,"byte_end":83,"line_start":3,"line_end":3,"column_start":14,"column_end":25,"is_primary":false,"text":[{ "text":"# [ derive ( InferSchema ) ] # [","highlight_start":14,"highlight_end":25}],"label":null,"suggested_replacement":null,"expansion":{"span" :{"file_name":"Development/pathfinder-server/pathfinder-server/src/schema.rs","byte_start":0,"byte_end":37,"line_start":1,"line_end":1,"column_start ":1,"column_end":38,"is_primary":false,"text":[{"text":"infer_schema!("dotenv:DATABASE_URL");","highlight_start":1,"highlight_end":38 }],"label":null,"suggested_replacement":null,"expansion":null},"macro_decl_name":"infer_schema!","def_site_span":{"file_name":"","byte_start":0,"byte_end":484,"line_start":1,"line_end":11,"column_start":1,"column_end":53,"is_primary":false,"text":[{ "text":"( $ database_url : expr ) => {","highlight_start":1,"highlight_end":31},{"text":"mod __diesel_infer_schema {","highlight_start":1,"highlight_end": 28},{"text":"# [ableiten ( InferSchema ) ] # [","highlight_start":1,"highlight_end":33},{"text":"infer_schema_options ( database_url = $ database_url ) ] struct _Dummy ; } pub","highlight_start":1,"highlight_end":79},{"text":"use self :: __diesel_infer_schema :: * ; } ; (","highlight_start":1,"highlight_end":47},{"text":"$ database_url : expr , $ schema_name : expr ) => {","highlight_start":1,"highlight_end":52}, {"text":"mod __diesel_infer_schema {","highlight_start":1,"highlight_end":28},{"text":"# [ableiten ( InferSchema ) ] # [","highlight_start":1,"highlight_end" :33},{"text":"infer_schema_options (","highlight_start":1,"highlight_end":23},{"text":"database_url = $ database_url , schema_name = $ schema_name ) ] struct _Dummy","highlight_start ":1,"highlight_end":78},{"text":"; } pub use self :: __diesel_infer_schema :: * ; } ;","highlight_start":1,"highlight_end":53}],"label":null,"suggested_replacement":null,"expansion":null}}},"macro_decl_name":"#[derive(InferSchema) ]","def_site_span":null}}],"children":[{"message":"message: called Result::unwrap() on a Err value: "Failed to load environment variable DATABASE_URL: Umgebungsvariable nicht gefunden"","code":null,"level":"help","spans":[],"children":[],"rendered":null}],"rendered":"error: proc-macro ableite panickedn --> Development/pathfinder-server/pathfinder-server/src/schema.rs:1:1n |n1 | infer_schema!("dotenv:DATABASE_URL");n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ n |n = Hilfe: Nachricht: aufgerufen Result::unwrap() bei einem Err -Wert: „Fehler beim Laden der Umgebungsvariablen DATABASE_URL: Umgebungsvariable nicht gefunden“n = Hinweis: Dieser Fehler stammt von einem Makro außerhalb des aktuellen Crates (in Nightly-Builds mit -Z external -macro-backtrace für weitere Informationen)nn"}

Gibt es eine Möglichkeit, Umgebungsvariablen an das RLS zu übergeben? Oder vielleicht muss ein Pfad festgelegt werden, damit dotenv die Umgebungsvariable herausfinden kann.

enhancement

Hilfreichster Kommentar

Im Moment kann dies mit einem Wrapper-Skript, das in der rust-client.rlsPath -Konfiguration festgelegt ist, umgangen werden. Hier ist ein Beispiel-Wrapper-Skript:

#!/bin/bash
(>&2 echo "Running custom RLS wrapper")

RLS=rls
# Needs to pick up internal rustc libraries in the sysroot 
export LD_LIBRARY_PATH=$(rustc --print sysroot)/lib
# Set some extra env vars you'd like
export RUST_BACKTRACE=full
# Important to also forward all the arguments to the RLS binary 
$RLS "$@"

Das möchte ich aber auf erstklassigem Niveau unterstützen.

Alle 5 Kommentare

Hah, ich bin auf GENAU das gleiche Problem gestoßen! Würde mich freuen, wenn jemand, der mehr Erfahrung mit Rust hat, eine Idee hat, wie man das lösen kann.

Ich würde es auch gerne wissen; hat einer von euch @mpj oder @kjeremy es herausgefunden?

Dasselbe Problem für alle, gibt es eine Möglichkeit, RLS dazu zu bringen, ein .bat-Skript oder so etwas auszuführen?

Im Moment kann dies mit einem Wrapper-Skript, das in der rust-client.rlsPath -Konfiguration festgelegt ist, umgangen werden. Hier ist ein Beispiel-Wrapper-Skript:

#!/bin/bash
(>&2 echo "Running custom RLS wrapper")

RLS=rls
# Needs to pick up internal rustc libraries in the sysroot 
export LD_LIBRARY_PATH=$(rustc --print sysroot)/lib
# Set some extra env vars you'd like
export RUST_BACKTRACE=full
# Important to also forward all the arguments to the RLS binary 
$RLS "$@"

Das möchte ich aber auf erstklassigem Niveau unterstützen.

Fügen Sie eine Windows-Version für vscode rust-client.rlsPath hinzu:

<strong i="7">@echo</strong> off
rustc --print sysroot > a:/tmp/temp-rls-msvc.txt
SET /p LD_LIBRARY_PATH=<a:/tmp/temp-rls-msvc.txt
SET RUST_BACKTRACE=full
SET "LIB=C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.26.28801\lib\x64;C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\lib\um\x64;C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\ucrt\x64;C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x64;"

rls %*
<strong i="8">@echo</strong> on

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen