PnX-SI / GeoNature

Application de saisie et de synthèse des observations faune et flore
GNU General Public License v3.0
104 stars 102 forks source link

modifier l'ordre des actions de migration #3146

Open gildeluermoz opened 4 months ago

gildeluermoz commented 4 months ago

Durant la migration d'une version vers une nouvelle version, je constate que les qq erreurs que j'ai pu rencontrer durant les nombreuses migrations que j'ai pu faire sont toujours des erreurs durant la mise à jour de la base de données. Lorsque le script migration.sh rencontre une erreur durant cette étape, il s'arrête. Il faut corriger la ou les erreurs en base pour pouvoir relancer la mise à jour de la base par alembic. En général, je fais cette manip manuellement plutôt que de relancer migration.sh Il faut alors aussi lancer manuellement ce qui suis dans le script, c'est à dire la récupération des medias

Si ça ne pose pas de problème, je propose d'inverser l'ordre de ces opérations pour mettre la mise à jour de la base en dernier, de manière à n'avoir plus que cette opération à faire (+ le restart des services). Ce qui donnerait


# On déplace les médias à la fin de la migration, pour ne pas se retrouver avec une nouvelle installation
# GeoNature cassé mais les médias déjà déplacé de l’ancien GN au nouveau GN non fonctionnel.
echo "Déplacement des anciens fichiers static vers les médias …"  # before GN 2.12
cd "${olddir}/backend"
if [ -d static/medias ]; then mkdir -p media/attachments; mv static/medias/* media/attachments/; fi  # medias becomes attachments
if [ -d static/pdf ]; then mkdir -p media; mv static/pdf media/; fi
if [ -d static/exports ]; then mkdir -p media; mv static/exports media/; fi
if [ -d static/geopackages ]; then mkdir -p media; mv static/geopackages media/; fi
if [ -d static/shapefiles ]; then mkdir -p media; mv static/shapefiles media/; fi
if [ -d static/mobile ]; then mkdir -p media; mv static/mobile media/; fi
echo "Déplacement des médias …"
shopt -s nullglob
for dir in "${olddir}"/backend/media/*; do
    if [ -d "${newdir}"/backend/media/$(basename "${dir}") ]; then
        for subdir in "${dir}"/*; do
            mv -n "${subdir}" "${newdir}"/backend/media/$(basename "${dir}")/
        done
    else
        mv -n "${dir}" "${newdir}"/backend/media/
    fi
done
shopt -u nullglob

echo "Mise à jour de la base de données…"
# Si occtax est installé, alors il faut le mettre à jour en version 4c97453a2d1a (min.)
# *avant* de mettre à jour GeoNature (contrainte NOT NULL sur id_source dans la synthèse)
# Voir https://github.com/PnX-SI/GeoNature/issues/2186#issuecomment-1337684933
geonature db heads | grep "(occtax)" > /dev/null && geonature db upgrade occtax@4c97453a2d1a
geonature db autoupgrade || exit 1
geonature upgrade-modules-db || exit 1
# Mise à jour manuel de validation, la branche Alambic ayant été rajouté avec GN 2.13
geonature db heads | grep "(validation)" > /dev/null && geonature db upgrade validation@head

echo "Redémarrage des services…"
for service in ${SERVICES[@]}; do
    sudo systemctl start "${service}"
done

deactivate

echo "Migration terminée"
bouttier commented 1 month ago

Il y a une justification à cet ordre dans le script :

# On déplace les médias à la fin de la migration, pour ne pas se retrouver avec une nouvelle installation
# GeoNature cassé mais les médias déjà déplacé de l’ancien GN au nouveau GN non fonctionnel.

Pour cette raison je ne suis pas forcément fan de l’idée d’inverser.

Normalement le script de migration peut être lancé plusieurs fois, et il finira ce qu’il avait commencé, et notamment reprendra les migrations là où elles en étaient.

Mais je peux comprendre que tu n’es pas envie de tous relancer. Pour cela, je pense qu’il peut être pas mal de découper le script de migration à la manière du install_all, afin de pouvoir lancer qu’une étape bien précise facilement.