Skip to content

Commit

Permalink
feat: docs updated
Browse files Browse the repository at this point in the history
  • Loading branch information
francesco-filicetti committed Aug 31, 2022
1 parent 3c848d2 commit fc0b5cd
Showing 1 changed file with 182 additions and 0 deletions.
182 changes: 182 additions & 0 deletions docs/source/01_getting-started/getting_started.rst
Original file line number Diff line number Diff line change
Expand Up @@ -450,3 +450,185 @@ Per un ulteriore controllo in fase di debug è possibile utilizzare i comandi se
/etc/init.d/uni_ticket stop
uwsgi --ini /opt/uni_ticket/uwsgi_setup/uwsgi.ini.debug
Migrazione dalla v1.x alla v2.0.0
=================================

Questa semplice guida consente di aggiornare agevolmente una istanza di uniTicket v1.x alla versione 2.

**01 - Stoppare il servizio**

.. code-block:: python
/etc/init.d/uni_ticket stop
**02 - Export dei ContentType**

E' necessario ricostruire la tabella dei ContentType,
generata automaticamente da Django all'applicazione delle migrazioni,
per mantenere la consistenza delle FK utilizzate dai log.

.. code-block:: python
# CLI Django
from django.contrib.contenttypes.models import ContentType
ct = ContentType.objects.all()
# old_conf sarà quindi una lista di dizionari
old_conf = []
for cct in ct:
old_conf.append({'pk': cct.pk,
'app_label': cct.app_label,
'model': cct.model})
print(old_conf)
Copiare old_conf su un file di testo, ci servirà dopo

**02 - DB Backup**

.. code-block:: python
# CLI Django
./manage.py dumpdata --exclude auth.permission --exclude contenttypes --exclude sessions --indent 2 > path_to_your_file.json
**03 - Path del progetto**

- Rinominare la folder del progetto [path]/uniticket in [path]/uniticket_tmp
- Creare [path]/uniticket (è preferibile che si usi l'utente linux proprietario di [path]/uniticket)

**04 - Download repository**

.. code-block:: python
# In [path]/uniticket
git clone https://github.com/UniversitaDellaCalabria/uniTicket.git
**05 - Django settings**

.. code-block:: python
cp [path]/uniticket/uniticket/uni_ticket_project/settingslocal.py.example [path]/uniticket/uniticket/uni_ticket_project/settingslocal.py
Modificare le variabili opprtune (ignorare la parte dedicata al DB momentaneamente)

**06 - Media e statics**

Copiare media e statics nella nuova folder

.. code-block:: python
cp [path]/uniticket_tmp/data [path]/uniticket/uniticket
**07 - Database**

- Se si intende utilizzare lo stesso DB, eliminare tutte le tabelle presenti altrimenti utilizzare un nuovo DB (opzione consigliata)
- Aggiornare i dati relativi nel settingslocal.py

**08 - Migrazioni**

.. code-block:: python
# CLI Django
./manage.py migrate
**09 - Ripristino dei ContentType**

Poichè i log dei ticket sono collegati ai ContentType,
è necessario sovrascrivere i valori creati da Django nella
migrazione iniziale per la consistenza del backup da importare

.. code-block:: python
# CLI Django
# in una variabile "old_conf" copiare la lista prodotta allo step 01
old_conf = ...
from django.contrib.contenttypes.models import ContentType
ct = ContentType.objects.all()
# cancella ContentType da aggiornare (quelli presenti nella lista)
to_delete = []
for cct in ct:
app_label = cct.app_label
model = cct.model
for old_ct in old_conf:
if old_ct['app_label'] == app_label and old_ct['model'] == model:
to_delete.append(cct.pk)
break
ct.filter(pk__in=to_delete).delete()
# aggiorna la pk dei ContentType rimasti
# per evitare che questa vada in conflitto con il successivo step di importazione
ct = ContentType.objects.all()
to_delete = []
for cct in ct:
app_label = cct.app_label
model = cct.model
# nuova pk che non vada in conflitto con quelle da importare
pk = cct.pk + 100
# cambio il valore dei campi del contenttype di origine
# con dei valori fake per permettere la creazione di uno nuovo
cct.app_label = pk
cct.model = pk
cct.save()
to_delete.append(cct.pk)
# crea nuovo ContentType
ContentType.objects.create(pk=pk, app_label=app_label, model=model)
ct.filter(pk__in=to_delete).delete()
# ripristina i contenttypes provenienti dal db di origine (lista old_conf)
for old_ct in old_conf:
ContentType.objects.create(pk=old_ct['pk'],
app_label=old_ct['app_label'],
model=old_ct['model'])
**10 - Load Data**

Sostituire nel dump json le seguenti definizioni
con nano (https://it.stealthsettings.com/find-replace-nano-linux-os-x-terminal-text-editor.html)

- matricola_dipendente => identificativo_dipendente
- matricola_studente => identificativo_utente

Se nel dump sono presenti le tabelle delle app chat e channels
abilitarle nelle *INSTALLED_APPS* del settingslocal
e applicare le eventuali migrazioni

.. code-block:: python
# CLI Django
./manage.py loaddata path_to_your_file.json
**11 - Aggiornamento nuovo campo "ticket.assigned_data"**

Questo campo è presente e viene salvato automaticamente nella nuova release.
Deve essere inizializzato per tutti i ticket con la data della prima presa in carico.
Questo è necessairio solo nel processo di migrazione dalla v1.x alla v2.x.

.. code-block:: python
# CLI Django
from uni_ticket.models import Ticket, TicketAssignment
tickets = Ticket.objects.filter(assigned_date__isnull=True)
for ticket in tickets:
first_taken = TicketAssignment.objects\
.filter(ticket=ticket,
taken_date__isnull=False)\
.values_list("taken_date", flat=True)\
.first()
if first_taken:
ticket.assigned_date = first_taken
ticket.save()
print("Assigned data update for ticket ", ticket.code)
**12** - Se non ci sono criticità è possibile rimuovere la cartella [path]/uniticket_tmp

0 comments on commit fc0b5cd

Please sign in to comment.