forked from ScoDoc/ScoDoc
maj juin 2022
This commit is contained in:
parent
e9483e9fd9
commit
916e684b30
322
README.md
322
README.md
|
@ -1,189 +1,139 @@
|
|||
|
||||
# ScoDoc - Gestion de la scolarité - Version ScoDoc 9
|
||||
# Reapplication des modifs locales suite à upgrade serveur
|
||||
|
||||
Voila les opérations que j ai faite en direct pour mettre a jour notre scodoc local apres un upgrade de scodoc
|
||||
|
||||
l'exemple ici fait suite à l upgrade 9.1.55 -> 9.1.56
|
||||
le no de version (9.1.56) devrait être un parametre d'un éventuel script
|
||||
|
||||
Note preliminaire:
|
||||
- j ai installé git sur iut-scodoc
|
||||
- on travaille avec les réperoires:
|
||||
- /opt/scodoc répértoire de production
|
||||
- /opt/scodoc-local les fichiers différentes entre la version lillooise et la version officielle
|
||||
- /opt/ScoDoc-git le working-dir de git
|
||||
|
||||
Tous ces répertoires doivent être la propriété de l'user `scodoc
|
||||
|
||||
Je pars d'un situation où le working dir est sur la branche `local`, que le depot distant git contient la dernière version et que /opt/scodoc a déjà été mis à jour
|
||||
|
||||
Mise en place
|
||||
```bash
|
||||
cd /opt/ScoDoc-git/
|
||||
su scodoc
|
||||
```
|
||||
|
||||
première vérification que l on est bien sur la branche `local` et à jour (sinon faire `git checkout local`)
|
||||
```bash
|
||||
git status
|
||||
Sur la branche local
|
||||
rien à valider, la copie de travail est propre
|
||||
|
||||
git log -1
|
||||
commit 322090276326c36e8d5525372e3e0804569b70ac (HEAD -> local)
|
||||
Merge: 574fede 514a09e
|
||||
Author: jean-marie Place (as scodoc) <jean-marie.place@univ-lille.fr>
|
||||
Date: Mon Feb 14 16:49:36 2022 +0100
|
||||
|
||||
Merge tag '9.1.55' into local
|
||||
|
||||
9.1 220213
|
||||
```
|
||||
|
||||
Recpie en local de l'historique officiel (contient la nouvelle version (ici 9.1.56) en tant que tag)
|
||||
```bash
|
||||
git fetch
|
||||
remote: Enumerating objects: 32, done.
|
||||
remote: Counting objects: 100% (32/32), done.
|
||||
remote: Compressing objects: 100% (17/17), done.
|
||||
remote: Total 17 (delta 15), reused 0 (delta 0), pack-reused 0
|
||||
Dépaquetage des objets: 100% (17/17), 2.64 Kio | 246.00 Kio/s, fait.
|
||||
Depuis https://scodoc.org/git/ScoDoc/ScoDoc
|
||||
0196d41..60a77b8 dev92 -> origin/dev92
|
||||
* [nouvelle étiquette] 9.1.56 -> 9.1.56
|
||||
```
|
||||
|
||||
Intégration des dernières midif officielles dans la branche locale
|
||||
Il est possible que la fusion déclenche une erreur à ce niveai si la mise à jour officielle concerne un des fichiers modifiés localalement
|
||||
Dans ce cas, pas d'autre solution que de verifier la fusion à la main
|
||||
|
||||
si procedure automatisée, prévoir un arrêt éventuel à ce niveau (basé sur la valeur de retour gu git merge ?)
|
||||
|
||||
```bash
|
||||
git merge origin 9.1.56
|
||||
Fusion automatique de app/views/notes.py
|
||||
Fusion automatique de app/scodoc/sco_formsemestre_status.py
|
||||
Merge made by the 'recursive' strategy.
|
||||
app/but/bulletin_but.py | 2 +-
|
||||
app/but/bulletin_but_xml_compat.py | 26 ++++++++++++++++----------
|
||||
app/comp/res_common.py | 11 +++++++++++
|
||||
app/models/moduleimpls.py | 2 +-
|
||||
......
|
||||
......
|
||||
app/templates/pn/form_ues.html | 5 +++++
|
||||
app/templates/pn/ue_infos.html | 2 +-
|
||||
app/views/absences.py | 4 +++-
|
||||
app/views/notes.py | 2 +-
|
||||
sco_version.py | 2 +-
|
||||
35 files changed, 149 insertions(+), 90 deletions(-)
|
||||
```
|
||||
|
||||
Si tout s est bien passé, vérification
|
||||
|
||||
```bash
|
||||
git status
|
||||
Sur la branche local
|
||||
rien à valider, la copie de travail est propre
|
||||
```
|
||||
|
||||
Enumération des fichiers modifiés localement
|
||||
```bash
|
||||
git diff --name-only 9.1.56
|
||||
app/scodoc/sco_excel.py
|
||||
app/scodoc/sco_excel_add.py
|
||||
app/scodoc/sco_formsemestre_status.py
|
||||
app/scodoc/sco_prepajury_formats.py
|
||||
app/scodoc/sco_prepajury_iuta.py
|
||||
app/views/notes.py
|
||||
app/views/scolar.py
|
||||
```
|
||||
|
||||
et recopie des diffs dans `/opt/scodoc-local/`
|
||||
(pour l instant 2 sous répertoires /app/scodoc et /app/views)
|
||||
TODO adapter la commande pour créer d'autres sous-répertoires si besoin (actuellement -> erreur bash)
|
||||
|
||||
```bash
|
||||
for f in $(git diff --name-only 9.1.56); do cp -p $f /opt/scodoc-local/$f ; done
|
||||
```
|
||||
|
||||
Si tout s'est bien passé jusque là recopie des fichiers diffs en production
|
||||
```bash
|
||||
for f in $(git diff --name-only 9.1.56); do cp -p $f /opt/scodoc/$f ; done
|
||||
```
|
||||
|
||||
Effacement du cache REDIS (préservé même en cas de redémarrage serveur)
|
||||
Et relance du serveur
|
||||
|
||||
```bash
|
||||
cd /opt/scodoc
|
||||
source venv/bin/activate
|
||||
flask clear-cache
|
||||
|
||||
exit
|
||||
systemctl restart scodoc9
|
||||
```
|
||||
|
||||
# Ajout d'autres adaptations locales
|
||||
|
||||
Ajouter les nouvelles modifs à la branche `local`du git
|
||||
|
||||
Et compléter ci-dessous.
|
||||
|
||||
## Adaptations actuelles
|
||||
- Ajout mention adaptation local à l'écran principal
|
||||
- api: formsemestre_partition_list
|
||||
- Ajout dans le menu de `Générer feuille préparation Jury (DUT)`
|
||||
- TODO: poursuite d'études
|
||||
- TODO: Affichage des étiquettes étudiant
|
||||
|
||||
(c) Emmanuel Viennet 1999 - 2022 (voir LICENCE.txt)
|
||||
|
||||
Installation: voir instructions à jour sur <https://scodoc.org/GuideInstallDebian11>
|
||||
|
||||
Documentation utilisateur: <https://scodoc.org>
|
||||
|
||||
## Version ScoDoc 9
|
||||
|
||||
La version ScoDoc 9 est basée sur Flask (au lieu de Zope) et sur
|
||||
**python 3.9+**.
|
||||
|
||||
La version 9.0 s'efforce de reproduire presque à l'identique le fonctionnement
|
||||
de ScoDoc7, avec des composants logiciels différents (Debian 11, Python 3,
|
||||
Flask, SQLAlchemy, au lien de Python2/Zope dans les versions précédentes).
|
||||
|
||||
|
||||
|
||||
### État actuel (26 jan 22)
|
||||
|
||||
- 9.1 (master) reproduit l'ensemble des fonctions de ScoDoc 7 (donc pas de BUT), sauf:
|
||||
- ancien module "Entreprises" (obsolète) et ajoute la gestion du BUT.
|
||||
|
||||
- 9.2 (branche refactor_nt) est la version de développement.
|
||||
|
||||
|
||||
### Lignes de commandes
|
||||
|
||||
Voir [https://scodoc.org/GuideConfig](le guide de configuration).
|
||||
|
||||
|
||||
## Organisation des fichiers
|
||||
|
||||
L'installation comporte les fichiers de l'application, sous `/opt/scodoc/`, et
|
||||
les fichiers locaux (archives, photos, configurations, logs) sous
|
||||
`/opt/scodoc-data`. Par ailleurs, il y a évidemment les bases de données
|
||||
postgresql et la configuration du système Linux.
|
||||
|
||||
### Fichiers locaux
|
||||
Sous `/opt/scodoc-data`, fichiers et répertoires appartenant à l'utilisateur `scodoc`.
|
||||
Ils ne doivent pas être modifiés à la main, sauf certains fichiers de configuration sous
|
||||
`/opt/scodoc-data/config`.
|
||||
|
||||
Le répertoire `/opt/scodoc-data` doit être régulièrement sauvegardé.
|
||||
|
||||
Principaux contenus:
|
||||
|
||||
/opt/scodoc-data
|
||||
/opt/scodoc-data/log # Fichiers de log ScoDoc
|
||||
/opt/scodoc-data/config # Fichiers de configuration
|
||||
.../config/logos # Logos de l'établissement
|
||||
.../config/depts # un fichier par département
|
||||
/opt/scodoc-data/photos # Photos des étudiants
|
||||
/opt/scodoc-data/archives # Archives: PV de jury, maquettes Apogée, fichiers étudiants
|
||||
|
||||
## Pour les développeurs
|
||||
|
||||
### Installation du code
|
||||
|
||||
Installer ScoDoc 9 normalement ([voir la doc](https://scodoc.org/GuideInstallDebian11)).
|
||||
|
||||
Puis remplacer `/opt/scodoc` par un clone du git.
|
||||
|
||||
sudo su
|
||||
mv /opt/scodoc /opt/off-scodoc # ou ce que vous voulez
|
||||
apt-get install git # si besoin
|
||||
cd /opt
|
||||
git clone https://scodoc.org/git/viennet/ScoDoc.git
|
||||
# (ou bien utiliser votre clone gitea si vous l'avez déjà créé !)
|
||||
mv ScoDoc scodoc # important !
|
||||
|
||||
Il faut ensuite installer l'environnement et le fichier de configuration:
|
||||
|
||||
# Le plus simple est de piquer le virtualenv configuré par l'installeur:
|
||||
mv /opt/off-scodoc/venv /opt/scodoc
|
||||
|
||||
Et la config:
|
||||
|
||||
ln -s /opt/scodoc-data/.env /opt/scodoc
|
||||
|
||||
Cette dernière commande utilise le `.env` crée lors de l'install, ce qui
|
||||
n'est pas toujours le plus judicieux: vous pouvez modifier son contenu, par
|
||||
exemple pour travailler en mode "développement" avec `FLASK_ENV=development`.
|
||||
|
||||
### Tests unitaires
|
||||
|
||||
Les tests unitaires utilisent normalement la base postgresql `SCODOC_TEST`.
|
||||
Avant le premier lancement, créer cette base ainsi:
|
||||
|
||||
./tools/create_database.sh SCODOC_TEST
|
||||
export FLASK_ENV=test
|
||||
flask db upgrade
|
||||
|
||||
Cette commande n'est nécessaire que la première fois (le contenu de la base
|
||||
est effacé au début de chaque test, mais son schéma reste) et aussi si des
|
||||
migrations (changements de schéma) ont eu lieu dans le code.
|
||||
|
||||
Certains tests ont besoin d'un département déjà créé, qui n'est pas créé par les
|
||||
scripts de tests:
|
||||
Lancer au préalable:
|
||||
|
||||
flask delete-dept TEST00 && flask create-dept TEST00
|
||||
|
||||
Puis dérouler les tests unitaires:
|
||||
|
||||
pytest tests/unit
|
||||
|
||||
Ou avec couverture (`pip install pytest-cov`)
|
||||
|
||||
pytest --cov=app --cov-report=term-missing --cov-branch tests/unit/*
|
||||
|
||||
|
||||
#### Utilisation des tests unitaires pour initialiser la base de dev
|
||||
On peut aussi utiliser les tests unitaires pour mettre la base
|
||||
de données de développement dans un état connu, par exemple pour éviter de
|
||||
recréer à la main étudiants et semestres quand on développe.
|
||||
|
||||
Il suffit de positionner une variable d'environnement indiquant la BD
|
||||
utilisée par les tests:
|
||||
|
||||
export SCODOC_TEST_DATABASE_URI=postgresql:///SCODOC_DEV
|
||||
|
||||
(si elle n'existe pas, voir plus loin pour la créer) puis de les lancer
|
||||
normalement, par exemple:
|
||||
|
||||
pytest tests/unit/test_sco_basic.py
|
||||
|
||||
Il est en général nécessaire d'affecter ensuite un mot de passe à (au moins)
|
||||
un utilisateur:
|
||||
|
||||
flask user-password admin
|
||||
|
||||
**Attention:** les tests unitaires **effacent** complètement le contenu de la
|
||||
base de données (tous les départements, et les utilisateurs) avant de commencer !
|
||||
|
||||
#### Modification du schéma de la base
|
||||
|
||||
On utilise SQLAlchemy avec Alembic et Flask-Migrate.
|
||||
|
||||
flask db migrate -m "message explicatif....."
|
||||
flask db upgrade
|
||||
|
||||
Ne pas oublier de d'ajouter le script de migration à git (`git add migrations/...`).
|
||||
|
||||
**Mémo**: séquence re-création d'une base (vérifiez votre `.env`
|
||||
ou variables d'environnement pour interroger la bonne base !).
|
||||
|
||||
dropdb SCODOC_DEV
|
||||
tools/create_database.sh SCODOC_DEV # créé base SQL
|
||||
flask db upgrade # créé les tables à partir des migrations
|
||||
flask sco-db-init # ajoute au besoin les constantes (fait en migration 0)
|
||||
|
||||
# puis imports:
|
||||
flask import-scodoc7-users
|
||||
flask import-scodoc7-dept STID SCOSTID
|
||||
|
||||
Si la base utilisée pour les dev n'est plus en phase avec les scripts de
|
||||
migration, utiliser les commandes `flask db history`et `flask db stamp`pour se
|
||||
positionner à la bonne étape.
|
||||
|
||||
### Profiling
|
||||
|
||||
Sur une machine de DEV, lancer
|
||||
|
||||
flask profile --host 0.0.0.0 --length 32 --profile-dir /opt/scodoc-data
|
||||
|
||||
le fichier `.prof` sera alors écrit dans `/opt/scodoc-data` (on peut aussi utiliser `/tmp`).
|
||||
|
||||
Pour la visualisation, [snakeviz](https://jiffyclub.github.io/snakeviz/) est bien:
|
||||
|
||||
pip install snakeviz
|
||||
|
||||
puis
|
||||
|
||||
snakeviz -s --hostname 0.0.0.0 -p 5555 /opt/scodoc-data/GET.ScoDoc......prof
|
||||
|
||||
|
||||
|
||||
# Paquet Debian 11
|
||||
|
||||
Les scripts associés au paquet Debian (.deb) sont dans `tools/debian`. Le plus
|
||||
important est `postinst`qui se charge de configurer le système (install ou
|
||||
upgrade de scodoc9).
|
||||
|
||||
La préparation d'une release se fait à l'aide du script
|
||||
`tools/build_release.sh`.
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user