Containers¶
Overzicht¶
Elke build wordt geïsoleerd binnen zijn eigen container (Linux-container met naamruimte).
De basis is een Ubuntu-systeem, waarop alle vereiste afhankelijkheden van Odoo, evenals algemene nuttige pakketten, zijn geïnstalleerd.
Als je project aanvullende Python-afhankelijkheden vereist, of recentere releases, kunt je een requirements.txt
-bestand definiëren in de hoofdmap van je branches, waarin deze worden vermeld. Het platform zorgt ervoor dat deze afhankelijkheden in jouw containers worden geïnstalleerd. De pip-vereistenspecificaties documentatie kunnen je helpen bij het schrijven van een requirements.txt
bestand. Om een concreet voorbeeld te krijgen, bekijk het requirements.txt bestand van Odoo.
Er wordt ook rekening gehouden met de requirements.txt
bestanden van submodules. Het platform zoekt naar requirements.txt
bestanden in elke map die Odoo-modules bevat: niet in de modulemap zelf, maar in hun bovenliggende map.
Directorystructuur¶
Omdat de containers op Ubuntu zijn gebaseerd, volgt hun mapstructuur de Linux Filesystem Hierarchy Standard. Ubuntu’s bestandssysteemboomoverzicht legt de belangrijkste mappen uit.
Hier zijn de relevante mappen van Odoo.sh:
.
├── 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
Zowel Python 2.7 als 3.5 zijn in de containers geïnstalleerd. Echter:
Als je project is geconfigureerd om Odoo 10.0 te gebruiken, draait de Odoo-server met Python 2.7.
Als je project is geconfigureerd om Odoo 11.0 of hoger te gebruiken, draait de Odoo-server met Python 3.5.
Databaseshell¶
Terwijl je met de shell toegang krijgt tot een container, kunt je toegang krijgen tot de database met behulp van 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=>
Wees voorzichtig! Gebruik transacties (BEGIN…COMMIT/ROLLBACK) voor elke sql * instructies die tot wijzigingen leiden (*UPDATE, DELETE, ALTER, …), vooral voor je productiedatabase.
Het transactiemechanisme is jouw vangnet in geval van fouten. Je hoeft alleen maar jouw wijzigingen terug te draaien om je database terug te zetten naar de vorige staat.
Het kan bijvoorbeeld voorkomen dat je vergeet de WHERE-voorwaarde in te stellen.
odoo-addons-master-1=> BEGIN;
BEGIN
odoo-addons-master-1=> UPDATE res_users SET password = '***';
UPDATE 457
odoo-addons-master-1=> ROLLBACK;
ROLLBACK
In dat geval kunt je de ongewenste wijzigingen die je zojuist per ongeluk hebt aangebracht, ongedaan maken en de instructie herschrijven:
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
Vergeet echter niet je transactie vast te leggen of terug te draaien nadat je deze heeft gedaan. Openstaande transacties kunnen records in de tabellen vergrendelen en de actieve database wacht mogelijk tot ze worden vrijgegeven. Het kan ervoor zorgen dat een server voor onbepaalde tijd blijft hangen.
Gebruik bovendien, indien mogelijk, eerst de staging-databases om jouw uitspraken te testen. Het geeft je een extra vangnet.
Voer een Odoo-server jeit¶
Je kunt een Odoo-serverinstantie starten vanuit een containershell. Je kunt er vanuit de buitenwereld niet met een browser bij, maar je kunt bijvoorbeeld wel:
gebruik de Odoo-shell,
$ 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'
installeer een module,
$ odoo-bin -i sale --without-demo=all --stop-after-init
een module bijwerken,
$ odoo-bin -u sale --stop-after-init
voer de tests jeit voor een module,
$ odoo-bin -i sale --test-enable --log-level=test --stop-after-init
In de bovenstaande opdrachten is het argument:
--without-demo=all
voorkomt dat demogegevens voor alle modules worden geladen--stop-after-init
zal de serverinstantie onmiddellijk afsluiten nadat de door je gevraagde bewerkingen zijn voltooid.
Meer opties zijn beschikbaar en gedetailleerd in de CLI-documentatie.
Je kunt in de logbestanden (~/logs/odoo.log) het pad van de add-ons vinden dat door Odoo.sh wordt gebruikt om de server te laten draaien. Zoek naar “odoo: add-onspaden”:
2018-02-19 10:51:39,267 4 INFO ? odoo: Odoo version 17.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/17.0', '/home/odoo/src/user', '/home/odoo/src/enterprise', '/home/odoo/src/themes', '/home/odoo/src/odoo/addons', '/home/odoo/src/odoo/odoo/addons']
Wees voorzichtig, vooral met de productiedatabase. Bewerkingen die je uitvoert met dit Odoo-serverexemplaar zijn niet geïsoleerd: wijzigingen zullen van kracht zijn in de database. Voer je tests altijd uit in de testdatabases.
Foutopsporing in Odoo.sh¶
Het debuggen van een Odoo.sh-build is niet echt anders dan bij een andere Python-app. Dit artikel legt alleen de specifieke kenmerken en beperkingen van het Odoo.sh-platform uit, en gaat ervan uit dat je al weet hoe je een debugger moet gebruiken.
Notitie
Als je nog niet weet hoe je een Python-applicatie moet debuggen, zijn er meerdere introductiecursussen die gemakkelijk op internet te vinden zijn.
Je kunt pdb
, pudb
of ipdb
gebruiken om de code op Odoo.sh te debuggen. Omdat de server buiten een shell draait, kun je de debugger niet rechtstreeks vanuit de backend van jouw Odoo-instantie starten, omdat de debugger een shell nodig heeft om te kunnen werken.
pdb wordt standaard in elke container geïnstalleerd.
Als je pudb of ipdb wilt gebruiken, moet je het eerst installeren.
Om dit te doen, heeft je twee opties:
tijdelijk (alleen in de huidige build):
$ pip install pudb --user
of
$ pip install ipdb --user
permanent: voeg
pudb
ofipdb
toe aan hetrequirements.txt
bestand van het project.
Bewerk vervolgens de code waar je de debugger wilt activeren en voeg dit toe:
import sys
if sys.__stdin__.isatty():
import pdb; pdb.set_trace()
De voorwaarde sys.__stdin__.isatty()
is een hack die detecteert of je Odoo vanuit een shell uitvoert.
Sla het bestand op en voer vervolgens de Odoo Shell jeit:
$ odoo-bin shell
Ten slotte kunt je via de Odoo Shell het stukje code/functie/methode activeren dat je wilt debuggen.