Contenitori¶
Panoramica¶
Ogni build è isolato nel proprio contenitore (contenitore spazio nome Linux).
La base è un sistema Ubuntu dove tutte le dipendenze richieste da Odoo, così come pacchetti comuni utili, vengono installate.
Se il tuo progetto richiede dipendenze Python aggiuntive o versioni più recenti, puoi definire un file requirements.txt
nella radice dei rami che le elencano. La piattaforma si occuperà di installare le dipendenze nei contenitori. La documentazione relativa ai specificatori dei requisiti pip può aiutarti a redigere un file requirements.txt
. Per avere un esempio concreto, controlla il file requirements.txt di Odoo.
I file requirements.txt
dei moduli secondari vengono considerati allo stesso modo. La piattaforma cerca i file requirements.txt
in ogni cartella contenente moduli Odoo: non nella cartella del modulo stesso ma nella cartella padre.
Struttura della cartella¶
Dato che i contenitori si basano su Ubuntu, la struttura della cartella segue lo standard della gerarchia del filesystem di linux. La panoramica dell’albero del filesystem di Ubuntu spiega le principali cartelle.
Di seguito, le cartello Odoo.sh pertinenti:
.
├── home
│ └── odoo
│ ├── src
│ │ ├── odoo Odoo Community source code
│ │ │ └── odoo-bin Odoo server executable
│ │ ├── enterprise Odoo Enterprise source code
│ │ ├── themes Odoo Themes source code
│ │ └── user Your repository branch source code
│ ├── data
│ │ ├── filestore database attachments, as well as the files of binary fields
│ │ └── sessions visitors and users sessions
│ └── logs
│ ├── install.log Database installation logs
│ ├── odoo.log Running server logs
│ ├── update.log Database updates logs
│ └── pip.log Python packages installation logs
└── usr
├── lib
│ ├── python2.7
│ └── dist-packages Python 2.7 standard libraries
│ ├── python3
│ └── dist-packages Python 3 standard libraries
│ └── python3.5
│ └── dist-packages Python 3.5 standard libraries
├── local
│ └── lib
│ ├── python2.7
│ │ └── dist-packages Python 2.7 third-party libraries
│ └── python3.5
│ └── dist-packages Python 3.5 third-party libraries
└── usr
└── bin
├── python2.7 Python 2.7 executable
└── python3.5 Python 3.5 executable
Sia Python 2.7 che 3.5 vengono installate nei contenitori. Tuttavia:
Se il tuo progetto è configurato per utilizzare Odoo 10.0, il server Odoo funzionerà con Python 2.7.
Se il tuo progetto è configurato per utilizzare Odoo 11.0, il server Odoo funzionerà con Python 3.5.
Shell del database¶
Mentre accedi al contenitore attraverso la shell, puoi accedere al database utilizzando psql.
odoo@odoo-addons-master-1.odoo.sh:~$ psql
psql (9.5.2, server 9.5.11)
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
Type "help" for help.
odoo-addons-master-1=>
Attenziona! Utilizza transazioni (BEGIN…COMMIT/ROLLBACK) per ogni dichiarazione sql che porta a modifiche (UPDATE, DELETE, ALTER, …), specialmente per il database di produzione.
Il meccanismo di transazione è la tua ancora di salvezza in caso di errore. Devi semplicemente ripristinare le modifiche per far tornare il database allo stato precedente.
Ad esempio, potrebbe accadere di dimenticare di configurare la condizione DOVE.
odoo-addons-master-1=> BEGIN;
BEGIN
odoo-addons-master-1=> UPDATE res_users SET password = '***';
UPDATE 457
odoo-addons-master-1=> ROLLBACK;
ROLLBACK
In questo caso, puoi ripristinare lo stato precedente per annullare le modifiche non desiderate apportate per errore e riscrivere la dichiarazione:
odoo-addons-master-1=> BEGIN;
BEGIN
odoo-addons-master-1=> UPDATE res_users SET password = '***' WHERE id = 1;
UPDATE 1
odoo-addons-master-1=> COMMIT;
COMMIT
Tuttavia, non dimenticare di eseguire il commit o ripristinare lo stato della transazione dopo averlo fatto. Le transazioni aperte potrebbero bloccare i record nelle tue tabelle e i database in esecuzione potrebbero aspettarne il rilascio. Può causare un blocco del server a tempo indeterminato.
Inoltre, quando possibile, usa i database di staging per testare le dichiarazioni in anticipo e avere una seconda ancora di salvataggio.
Far funzionare un server Odoo¶
Puoi avviare l’istanza di un server Odoo da una shell di contenitore. Non sarai in grado di accedervi dall’esterno con un browser ma potrai:
utilizzare la shell Odoo;
$ odoo-bin shell
>>> partner = env['res.partner'].search([('email', '=', 'asusteK@yourcompany.example.com')], limit=1)
>>> partner.name
'ASUSTeK'
>>> partner.name = 'Odoo'
>>> env['res.partner'].search([('email', '=', 'asusteK@yourcompany.example.com')], limit=1).name
'Odoo'
installare un modulo;
$ odoo-bin -i sale --without-demo=all --stop-after-init
aggiornare un modulo;
$ odoo-bin -u sale --stop-after-init
eseguire dei test per un modulo.
$ odoo-bin -i sale --test-enable --log-level=test --stop-after-init
Nei comandi in alto, l’argomento:
--without-demo=all
impedisce che i dati demo vengano caricati per tutti i moduli;--stop-after-init
arresterà immediatamente l’istanza del server dopo aver completato le operazioni richieste.
Più opzioni sono disponibili e descritte alla pagina relativa alla documentazione CLI.
Nei registri (~/logs/odoo.log) puoi trovare il percorso dei componenti aggiuntivi usato da Odoo.sh per far funzionare il server. Cerca «odoo: addons paths»:
2018-02-19 10:51:39,267 4 INFO ? odoo: Odoo version 16.0
2018-02-19 10:51:39,268 4 INFO ? odoo: Using configuration file at /home/odoo/.config/odoo/odoo.conf
2018-02-19 10:51:39,268 4 INFO ? odoo: addons paths: ['/home/odoo/data/addons/16.0', '/home/odoo/src/user', '/home/odoo/src/enterprise', '/home/odoo/src/themes', '/home/odoo/src/odoo/addons', '/home/odoo/src/odoo/odoo/addons']
Attenzione, specialmente con il database di produzione. Le operazioni eseguite sull’istanza del presente server Odoo non sono isolate: le modifiche saranno applicate a tutti gli effetti sul database. Esegui i test sempre nei database di staging.
Eseguire il debug in Odoo.sh¶
Eseguire il debug di un build di Odoo.sh non è molto diverso da un’altra app Python. Il presente articolo spiega solamente le specifiche e limitazioni della piattaforma Odoo.sh e presuppone che tu sappia già come utilizzare un debugger.
Nota
Se non sai ancora come effettuare il debug di un’applicazione Python, esistono molteplici corsi introduttivi facilmente reperibili sul web.
È possibile utilizzare pdb
, pudb
o ipdb
per eseguire il debug del tuo codice su Odoo.sh. Dato che il server viene eseguito al di fuori di una shell, non è possibile avviare il debugger direttamente dal backend dell’istanza Odoo in quanto il debugger ha bisogno di una shell per funzionare.
pdb viene installato per impostazione predefinita in ogni contenitore.
Se vuoi utilizzare pudb o ipdb è necessario installarlo in anticipo.
Per farlo, hai due opzioni:
temporanea (nel build attuale):
$ pip install pudb --user
oppure
$ pip install ipdb --user
permanente: aggiungi
pudb
oipdb
al filerequirements.txt
del progetto.
In seguito, modifica il codice dove vuoi attivare il debugger e aggiungi questo:
import sys
if sys.__stdin__.isatty():
import pdb; pdb.set_trace()
La condizione sys.__stdin__.isatty()
è un trucco che rileva se si esegue Odoo da una shell.
Salva il file per poi eseguire la shell Odoo:
$ odoo-bin shell
Infine, tramite la shell Odoo, puoi attivare la parte di codice/funzione/metodo di cui vuoi eseguire il debug.