Tengo problemas con proyectos que incluyen diesel
y usan variables de entorno, por ejemplo:
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))
}
Da como resultado lo siguiente en la ventana de resultados:
{"mensaje":"proc-macro deriva pánico","código":null,"nivel":"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":[{ "texto":"# [ derivar ( InferSchema ) ] # [","highlight_start":14,"highlight_end":25}],"label":null,"suggested_replacement":null,"expansion":{"span" :{"Nombre del archivo":" ","byte_start":72,"byte_end":83,"line_start":3,"line_end":3,"column_start":14,"column_end":25,"is_primary":false,"text":[{ "texto":"# [ derivar ( InferSchema ) ] # [","highlight_start":14,"highlight_end":25}],"label":null,"suggested_replacement":null,"expansion":{"span" :{"file_name":"Desarrollo/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 }],"etiqueta":null,"reemplazo_sugerido":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":[{ "texto":"( $ database_url : expr ) => {","highlight_start":1,"highlight_end":31},{"texto":"mod __diesel_infer_schema {","highlight_start":1,"highlight_end": 28},{"texto":"# [derive (InferSchema)] # [","highlight_start":1,"highlight_end":33},{"texto":"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},{"texto":"$ database_url : expr , $ schema_name : expr ) => {","highlight_start":1,"highlight_end":52}, {"texto":"mod __diesel_infer_schema {","highlight_start":1,"highlight_end":28},{"texto":"# [derive (InferSchema)] # [","highlight_start":1,"highlight_end" :33},{"texto":"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},{"texto":"; } 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: llamado Result::unwrap()
en unErr
: "Error al cargar la variable de entorno DATABASE_URL: variable de entorno no encontrada"","código":null,"nivel":"ayuda","spans":[],"niños":[],"rendered":null}],"rendered":"error: proc-macro deriva pánicon --> Desarrollo/pathfinder-server/pathfinder-server/src/schema.rs:1:1n |n1 | infer_schema!("dotenv:DATABASE_URL");n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^n |n = ayuda: mensaje: llamadoResult::unwrap()
en unErr
: "Error al cargar la variable de entorno DATABASE_URL: variable de entorno no encontrada"n = nota: este error se origina en una macro fuera de la caja actual (en compilaciones nocturnas, ejecute con -Z external -macro-backtrace para más información)nn"}
{"mensaje":"proc-macro deriva pánico","código":null,"nivel":"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":[{ "texto":"# [ derivar ( InferSchema ) ] # [","highlight_start":14,"highlight_end":25}],"label":null,"suggested_replacement":null,"expansion":{"span" :{"Nombre del archivo":" ","byte_start":72,"byte_end":83,"line_start":3,"line_end":3,"column_start":14,"column_end":25,"is_primary":false,"text":[{ "texto":"# [ derivar ( InferSchema ) ] # [","highlight_start":14,"highlight_end":25}],"label":null,"suggested_replacement":null,"expansion":{"span" :{"file_name":"Desarrollo/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 }],"etiqueta":null,"reemplazo_sugerido":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":[{ "texto":"( $ database_url : expr ) => {","highlight_start":1,"highlight_end":31},{"texto":"mod __diesel_infer_schema {","highlight_start":1,"highlight_end": 28},{"texto":"# [derive (InferSchema)] # [","highlight_start":1,"highlight_end":33},{"texto":"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},{"texto":"$ database_url : expr , $ schema_name : expr ) => {","highlight_start":1,"highlight_end":52}, {"texto":"mod __diesel_infer_schema {","highlight_start":1,"highlight_end":28},{"texto":"# [derive (InferSchema)] # [","highlight_start":1,"highlight_end" :33},{"texto":"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},{"texto":"; } 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: llamado Result::unwrap()
en unErr
: "Error al cargar la variable de entorno DATABASE_URL: variable de entorno no encontrada"","código":null,"nivel":"ayuda","spans":[],"niños":[],"rendered":null}],"rendered":"error: proc-macro deriva pánicon --> Desarrollo/pathfinder-server/pathfinder-server/src/schema.rs:1:1n |n1 | infer_schema!("dotenv:DATABASE_URL");n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^n |n = ayuda: mensaje: llamadoResult::unwrap()
en unErr
: "Error al cargar la variable de entorno DATABASE_URL: variable de entorno no encontrada"n = nota: este error se origina en una macro fuera de la caja actual (en compilaciones nocturnas, ejecute con -Z external -macro-backtrace para más información)nn"}
¿Hay alguna forma de pasar variables de entorno al RLS? O tal vez se deba establecer alguna ruta para que dotenv
pueda descubrir la variable ambiental.
¡Ja, me encontré EXACTAMENTE con el mismo problema! Me encantaría escuchar a alguien con más experiencia con Rust dar alguna idea sobre cómo resolver esto.
A mí también me encantaría saber; ¿Alguno de ustedes, @mpj o @kjeremy , lo descubrió?
El mismo problema para todos, ¿hay alguna forma de hacer que RLS ejecute algún script .bat o algo así?
En este momento, esto se puede solucionar utilizando un script de contenedor establecido en la configuración rust-client.rlsPath
. Aquí hay un script de contenedor de ejemplo:
#!/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 "$@"
Sin embargo, me gustaría apoyar eso en un nivel de primera clase.
Agregue una versión de Windows para 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
Comentario más útil
En este momento, esto se puede solucionar utilizando un script de contenedor establecido en la configuración
rust-client.rlsPath
. Aquí hay un script de contenedor de ejemplo:Sin embargo, me gustaría apoyar eso en un nivel de primera clase.