Installation sur un nouveau serveur
Pour faire la migration depuis la V2, j'ai (Joshua) fait une installation sur un nouveau serveur. J'ai donc rapatrié les données (hors média) ainsi que la bdd.
$> cd /usr/local/django_projects/ $> tar --exclude='./pod/static' --exclude='./pod/media' -zcvf podv2.tgz ./podv2 $> mysqldump -h bdd.univ.fr -u pod2 -pXXXXXXXXXX pod2 > dumpfile.sql
Pensez a récupérer les scripts de migration des librairies pythons utilisées par pod ($HOME/.local/ sur ubuntu si vous n'utilisez pas de virtual env, sinon ./<votre_virtual_env>) dans une archive tar que vous décompresserez dans votre environnement cible après avoir installé les librairies (pip install)
# Il faut patcher dans le tar la version de python que vous aller utiliser en PODv3 find <path_de_vos_librairies_python> -path "*/migrations/00*.py" -not -name "__init__.py" -exec tar --transform='s|python3.7|python3.9|' -rvf migration.tar {} \;
J'ai rapatrié ces 2 fichiers sur mon nouveau serveur et j'ai déployé les données.
$> cd /usr/local/django_projects $> tar -xvzf podv2.tgz . $> mysql -h bdd.univ.fr -u pod2 -pXXXXXXXXXXX pod3 < dumpfile.sql
→ Ne pas oublier de modifier le fichier de settings_local pour diriger vers la nouvelle BDD
Pour ceux qui utilisaient encore les vidéos interactives :
il faut remonter un environnement virtuel v2 : $> mkvirtualenv --system-site-packages --python=/usr/bin/python3 django_pod2
Ensuite, installer les dépendances qui vont bien :
$> python3 -m pip install -r requirements.txt
$> pip3 install mysqlclient==2.0.3
Il faut supprimer l'application de la base de données:
$> python manage.py migrate interactive zero
l'application tierce "interactive" n'est plus présente dans le code de Pod3, il faut donc penser à la retirer dans le settings_local (THIRD_PARTY_APPS = ["enrichment", "live"])
J'ai ensuite créé un nouvel environnement virtuel pour pod3
$> mkvirtualenv --system-site-packages --python=/usr/bin/python3 django_pod3
et j'ai récupéré la dernière version de Pod:
(django_pod3) pod@pod3:/usr/local/django_projects/podv3$ git pull origin master
Un MakeFile est maintenant fourni pour simplifier les commandes
(django_pod3) pod@pod3:/usr/local/django_projects/podv3$ cat Makefile
Vous pouvez donc l’utiliser pour finaliser votre installation. Il y a une commande pour tout mettre à jour : $> make upgrade
, toutefois, je préfère détailler ici les étapes :
Je commence à installer les lib python :
$> python3 -m pip install -r requirements.txt
Ensuite, je prépare les commandes de mis à jour de la bdd.
Attention
Il se peut qu'une dépendance avec l'application flatpage soit nécessaire, il faut donc aller récupérer le fichier sur l'ancien serveur dans ce répertoire :pod@pod2:~/.virtualenvs/django_pod/lib/python3.7/site-packages/django/contrib/flatpages/migrations
Sinon vous vous placez dans le même répertoire que lorsque vous avez sauvé vos fichiers de migration un peu plus haut et vous les extrayez
tar xvf migration.tar
$> make updatedb
Si vous rencontrez l'erreur
ImportError: cannot import name 'FieldDoesNotExist' from 'django.db.models.fields'
alors il faut mettre à jourdjango_select2_forms
via la commande
$> pip3 install django_select2_forms --upgrade
Une fois la préparation de la migration effectuée, je peux migrer ma base de données :
$> make migrate
Attention
Le mode de gestion des composants tiers pour le frontal de Pod à changé en podv3, nous ne les embarquons plus dans le code mais utilisons un gestionnaire de paquets pour cela.
Nous avons fait le choix de Yarn, qu'il vous faut donc installer sur votre environnement. Vous pouvez suivre la documentation suivante pour cela : https://yarnpkg.com/getting-started/install
Enfin, si tout est ok, vous pouvez respirer et collecter les fichiers statics pour Pod. Il suffit pour cela de lancer cette commande :
# Si vous êtes dans un environnement contenairisé et qu'il y a des fichiers customs dans le répertoire static python3 manage.py collectstatic # Si vous pouvez vous permettre de tout effacer dans static ( python3 manage.py collectstatic --clear ) make statics
Redis :
Dans cette version l'installation d'un serveur Redis pour la gestion du cache est obligatoire.
Voir la partie Installation de Redis de Installation de Pod V3 ou la doc officielle https://redis.io/docs/getting-started/
ElasticSearch :
Si vous changez d'instance ElasticSearch (notamment si vous n'utilisez pas un service ES déporté), pensez à réindexer les contenus avec cette commande :
cd django_projects/podv3 python manage.py index_videos --all
Si l'indexation échoue, jettez un oeil à pod/video_search/commands/index_videos.py si vous voyez une mention de __VIDEOS__ alors il faut la substituer par pod.video.context_processors.get_available_videos
Si après indexation vous n'avez aucune vidéo sur votre site et lors de vos recherches ou que vous avez des videos mais que vous ne pouvez pas les jouer, il se peut que certaines tables ne soient pas migrées, dans mon cas il fallait migrer:
- video_encodingvideo => video_encode_transcript_encodingvideo
- video_encodingaudio => video_encode_transcript_encodingaudio
- video_encodingstep => video_encode_transcript_encodingstep
- video_playlistvideo => video_encode_transcript_playlistvideo
- video_videorendition => video_encode_transcript_videorendition ( attention, cette table a un nouveau field threshold qu'il faut mettre à 0 par défaut)
That's all folks !