Documentation Frappe Framework

Frappe Framework

Migrations

Après une mise à jour, bench migrate aligne le schéma et lance les scripts de données déclarés dans patches.txt.

2 min de lectureMis à jour le Source : docs.frappe.io

Quand migrer

Le schéma change au fil du projet, et les données existantes doivent parfois être corrigées. Après avoir tiré les mises à jour d’une application, y compris Frappe, lancez bench migrate. Le déroulement de la commande est dans bench migrate.

Schéma

Modifier un DocType ajoute, retire ou change des champs. À l’enregistrement, un JSON est écrit dans les sources de l’application. À l’installation, les DocTypes sont créés depuis ce JSON. Les changements de schéma exigent developer_mode. Voir Activer le mode développeur.

bench migrate aligne les DocTypes sur la dernière version des JSON.

Les champs sont supprimés en douceur : la colonne reste dans la table, mais elle n’est plus visible. Cela évite une perte de données et laisse écrire une migration qui lit encore l’ancienne valeur. Frappe ne prend pas en charge les migrations de schéma inverses.

Données

Un script unique s’écrit comme une fonction execute dans un module Python, ajouté à patches.txt. bench create-patch le prépare : choix de l’application, DocType, description, nom de fichier. Si le dossier de patches n’existe pas, la commande propose de le créer, puis met à jour patches.txt.

La source recommande un chemin avec numéro et nom, par exemple frappe/patches/4_0/my_awesome_patch.py, déclaré par frappe.patches.4_0.my_awesome_patch. Dans execute, les métadonnées sont celles du JSON courant. On ne relit pas un état antérieur du système.

Une ligne unique peut aussi être une instruction : execute:frappe.get_doc("User", "Guest").save(). Chaque ligne de patches.txt doit être unique. Pour la rejouer, ajoutez un commentaire distinct, comme execute:frappe.installer.make_site_dirs() #2014-02-19.

Point d’attention

Une colonne retirée du formulaire reste en base. On ne revient pas en arrière sur le schéma. Une ligne de patch en double n’est pas réexécutée tant qu’un commentaire ne la rend pas unique.