Activer le mode offline de la librairie Rust SQLx

SQLx est une librairie Rust qui permet de s'interfacer avec une base de données et de vérifier à la compilation les schémas et requêtes SQL écrites dans notre code grâce aux macros sqlx::query! ou sqlx::query_as! (il faut activer la feature "macros" pour les rendre disponibles). C'est un outil très puissant, qui supporte également les migrations.

Mais pour que cela fonctionne, la base de données doit être accessible au moment de la compilation, ce qui n'est pas forcément utile tout le temps. Heureusement, les développeurs ont pensé à tout en nous permettant de générer les métadatas de nos schémas et requêtes, ce qui nous permet de compiler le code à n'importe quel moment plus tard.

Les étapes en détail

Ne faites par la même erreur que moi en utilisant la variable d'environnement DATABASE_URL dans votre projet car SQLx se bornera à chercher une base de données active au lieu d'utiliser le dossier .sqlx. La documentation indique qu'on peut pourtant mettre la variable SQLX_OFFLINE à true mais ça n'a jamais fonctionné malgré de nombreux essais.

Bonus

On peut également utiliser l'option --check dans notre CI pour vérifier que les métadatas présentes dans le dossier .sqlx sont à jour avec notre schéma de bdd et les requêtes écrites dans le code :

cargo sqlx prepare --check --database-url <DB_URL>

Liens utiles