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 uneErr
: "É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 uneErr
: "É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 uneErr
: "É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 uneErr
: "É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.
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
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 :Cependant, j'aimerais soutenir cela à un niveau de première classe.