Vscode-rust: Pasar variables de entorno a RLS

Creado en 1 dic. 2017  ·  5Comentarios  ·  Fuente: rust-lang/vscode-rust

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 un Err : "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: llamado Result::unwrap() en un Err : "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 un Err : "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: llamado Result::unwrap() en un Err : "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.

enhancement

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:

#!/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.

Todos 5 comentarios

¡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

¿Fue útil esta página
0 / 5 - 0 calificaciones