Vscode-rust: Passer des variables d'environnement à RLS

Créé le 1 déc. 2017  ·  5Commentaires  ·  Source: rust-lang/vscode-rust

J'ai des problèmes avec des projets qui incluent diesel et utilisent des variables d'environnement par exemple :

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))
}

Résultats dans ce qui suit dans la fenêtre de sortie :

{"message":"proc-macro dérive panique","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":"# [ dérive ( InferSchema ) ] # [","highlight_start":14,"highlight_end":25}],"label":null,"suggested_replacement":null,"expansion":{"span" :{"nom de fichier":"","byte_start":72,"byte_end":83,"line_start":3,"line_end":3,"column_start":14,"column_end":25,"is_primary":false,"text":[{ "text":"# [ dérive ( 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":"# [ dérive ( 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":"# [ dérive ( 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 : appelé Result::unwrap() sur une Err : "Échec du chargement de la variable d'environnement DATABASE_URL : variable d'environnement introuvable"","code":null,"level":"help","spans":[],"children":[],"rendered":null}],"rendered":"erreur : proc-macro dérive paniqué --> Développement/pathfinder-server/pathfinder-server/src/schema.rs:1:1n |n1 | infer_schema!("dotenv:DATABASE_URL");n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^n |n = aide : message : appelé Result::unwrap() sur une Err : "Échec du chargement de la variable d'environnement DATABASE_URL : variable d'environnement introuvable"n = note : cette erreur provient d'une macro en dehors du crate actuel (dans les versions Nightly, exécutez avec -Z external -macro-backtrace pour plus d'informations)nn"}
{"message":"proc-macro dérive panique","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":"# [ dérive ( InferSchema ) ] # [","highlight_start":14,"highlight_end":25}],"label":null,"suggested_replacement":null,"expansion":{"span" :{"nom de fichier":"","byte_start":72,"byte_end":83,"line_start":3,"line_end":3,"column_start":14,"column_end":25,"is_primary":false,"text":[{ "text":"# [ dérive ( 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":"# [ dérive ( 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":"# [ dérive ( 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 : appelé Result::unwrap() sur une Err : "Échec du chargement de la variable d'environnement DATABASE_URL : variable d'environnement introuvable"","code":null,"level":"help","spans":[],"children":[],"rendered":null}],"rendered":"erreur : proc-macro dérive paniqué --> Développement/pathfinder-server/pathfinder-server/src/schema.rs:1:1n |n1 | infer_schema!("dotenv:DATABASE_URL");n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^n |n = aide : message : appelé Result::unwrap() sur une Err : "Échec du chargement de la variable d'environnement DATABASE_URL : variable d'environnement introuvable"n = note : cette erreur provient d'une macro en dehors de la caisse actuelle (dans les builds Nightly, exécutez avec -Z external -macro-backtrace pour plus d'informations)nn"}

Existe-t-il un moyen de passer des variables d'environnement au RLS ? Ou peut-être qu'un chemin doit être défini pour que dotenv puisse comprendre la variable d'environnement.

enhancement

Commentaire le plus utile

À l'heure actuelle, cela peut être contourné à l'aide d'un script wrapper défini dans la configuration rust-client.rlsPath . Voici un exemple de script wrapper :

#!/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 "$@"

Cependant, j'aimerais soutenir cela à un niveau de première classe.

Tous les 5 commentaires

Hah, j'ai rencontré EXACTEMENT le même problème! J'adorerais entendre quelqu'un de plus expérimenté avec Rust donner une idée de la façon de résoudre ce problème.

moi aussi j'aimerais savoir; l'un de vous @mpj ou @kjeremy l'a-t-il compris ?

Même problème pour tout le monde, existe-t-il un moyen de faire en sorte que RLS exécute un script .bat ou quelque chose du genre ?

À l'heure actuelle, cela peut être contourné à l'aide d'un script wrapper défini dans la configuration rust-client.rlsPath . Voici un exemple de script wrapper :

#!/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 "$@"

Cependant, j'aimerais soutenir cela à un niveau de première classe.

Ajoutez une version Windows pour vscode rust-client.rlsPath :

<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

Cette page vous a été utile?
0 / 5 - 0 notes