Conteneurs¶
Vue d’ensemble¶
Chaque build est isolé dans son propre conteneur (conteneur d’espace de noms Linux).
La base est un système Ubuntu, où sont installées toutes les dépendances nécessaires à Odoo, ainsi que des paquets utiles courants.
If your project requires additional Python dependencies, or more recent releases,
you can define a requirements.txt
file in the root of your branches listing them.
The platform will take care to install these dependencies in your containers.
The pip requirements specifiers
documentation can help you write a requirements.txt
file.
To have a concrete example,
check out the requirements.txt file of Odoo.
Les fichiers requirements.txt
des sous-modules sont également pris en compte. La plateforme recherche les fichiers requirements.txt
dans chaque dossier contenant des modules Odoo : pas dans le dossier du module lui-même, mais dans leur dossier parent.
Structure du répertoire¶
Puisque les conteneurs sont basés sur Ubuntu, la structure de leur répertoire suit la norme de la hiérarchie des systèmes de fichiers (Filesystem Hierarchy Standard) de Linux. L’arborescence du système de fichiers d’Ubuntu vous explique les principaux répertoires.
Voici les répertoires pertinents d’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
Python 2.7 et 3.5 sont tous deux installés dans les conteneurs. Cependant :
Si votre projet est configuré pour utiliser Odoo 10.0, le serveur Odoo fonctionne avec Python 2.7.
Si votre projet est configuré pour utiliser Odoo 11.0 ou les versions ultérieures, le serveur Odoo fonctionne avec Python 3.5.
Shell de base de données¶
Lorsque vous accédez à un conteneur avec le shell, vous pouvez accéder à la base de données à l’aide de 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=>
Attention ! Utilisez des transactions (BEGIN…COMMIT/ROLLBACK) pour toutes les déclarations sql conduisant à des changements (UPDATE, DELETE, ALTER, …), surtout pour votre base de données de production.
Le mécanisme des transactions est votre filet de sécurité en cas d’erreur. Il vous suffit de revenir sur vos changements pour ramener votre base de données à son état antérieur.
Par exemple, il peut arriver que vous oubliiez de définir votre condition WHERE.
odoo-addons-master-1=> BEGIN;
BEGIN
odoo-addons-master-1=> UPDATE res_users SET password = '***';
UPDATE 457
odoo-addons-master-1=> ROLLBACK;
ROLLBACK
Dans ce cas, vous pouvez revenir en arrière pour annuler les changements non désirés que vous venez de faire par erreur, et réécrire la déclaration :
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
Cependant, n’oubliez pas d’effectuer un commit ou un rollback de votre transaction après l’avoir effectuée. Les transactions ouvertes pourraient verrouiller des enregistrements dans vos tableaux et votre base de données en cours d’exécution peut attendre qu’ils soient libérés. Cela peut bloquer le serveur indéfiniment.
De plus, dans la mesure du possible, utilisez vos bases de données de simulation pour d’abord tester vos déclarations. Vous disposerez ainsi d’un filet de sécurité supplémentaire.
Faire fonctionner un serveur Odoo¶
Vous pouvez démarrer une instance de serveur Odoo à partir d’un shell de conteneur. Vous ne serez pas en mesure d’y accéder depuis le monde extérieur avec un navigateur, mais vous pouvez par exemple :
utiliser le 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'
installer un module,
$ odoo-bin -i sale --without-demo=all --stop-after-init
mettre à jour un module,
$ odoo-bin -u sale --stop-after-init
effectuer des tests pour un module,
$ odoo-bin -i sale --test-enable --log-level=test --stop-after-init
Dans les commandes susmentionnées, l’argument :
--without-demo=all
empêche de charger les données de démonstration pour tous les modules--stop-after-init
arrête immédiatement l’instance du serveur après qu’elle ait effectué les opérations demandées.
D’autres options sont disponibles et détaillées dans la documentation CLI.
Vous pouvez trouver dans les journaux (~/logs/odoo.log) le chemin des modules complémentaires utilisé par Odoo.sh pour faire fonctionner votre serveur. Cherchez « odoo: addons paths »:
2018-02-19 10:51:39,267 4 INFO ? odoo: Odoo version 14.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/14.0', '/home/odoo/src/user', '/home/odoo/src/enterprise', '/home/odoo/src/themes', '/home/odoo/src/odoo/addons', '/home/odoo/src/odoo/odoo/addons']
Attention, surtout avec votre base de données de production. Les opérations que vous effectuez en exécutant cette instance de serveur Odoo ne sont pas isolées : les changements seront effectifs dans la base de données. Effectuez toujours vos tests dans vos bases de données de simulation.
Débogage dans Odoo.sh¶
Le débogage d’un build Odoo.sh n’est pas vraiment différent de celui d’une autre application Python. Cet article explique uniquement les spécificités et les limites de la plateforme Odoo.sh et suppose que vous savez déjà utiliser un débogueur.
Note
Si vous ne savez pas encore comment déboguer une application Python, il existe de nombreux cours d’introduction que vous pouvez facilement trouver sur Internet.
Vous pouvez utiliser pdb
, pudb
ou ipdb
pour déboguer votre code sur Odoo.sh. Comme le serveur est exécuté en dehors d’un shell, vous ne pouvez pas lancer le débogueur directement à partir du backend de votre instance Odoo, car le débogueur a besoin d’un shell pour fonctionner.
pdb est installé par défaut dans chaque conteneur.
Si vous voulez utiliser pudb ou ipdb vous devez l’installer avant.
Pour ce faire, vous avez deux options :
temporaire (uniquement dans le build actuel) :
$ pip install pudb --user
ou
$ pip install ipdb --user
permanent : ajoutez
pudb
ouipdb
au fichierrequirements.txt
de votre projet.
Modifiez ensuite le code où vous voulez déclencher le débogueur et ajoutez ceci :
import sys
if sys.__stdin__.isatty():
import pdb; pdb.set_trace()
La condition sys.__stdin__.isatty()
est un hack qui détecte si vous faites fonctionner Odoo à partir d’un shell.
Enregistrez le fichier et exécutez ensuite le Shell Odoo :
$ odoo-bin shell
Enfin, via le Shell Odoo, vous pouvez déclencher le morceau de code/fonction/méthode que vous voulez déboguer.