Container¶
Übersicht¶
Jeder Build ist in seinem eigenen Container isoliert (Linux-Namensraum-Container).
Die Basis ist ein Ubuntu-System, auf dem alle erforderlichen Abhängigkeiten von Odoo sowie allgemeine nützliche Pakete installiert sind.
Wenn Ihr Projekt zusätzliche Python-Abhängigkeiten oder neuere Versionen erfordert, können Sie eine Datei requirements.txt
im Stammverzeichnis Ihrer Zweige definieren, die diese auflistet. Die Plattform wird dafür sorgen, dass diese Abhängigkeiten in Ihren Containern installiert werden. Die Dokumentation pip requirements specifiers kann Ihnen beim Schreiben einer requirements.txt
-Datei helfen. Um ein konkretes Beispiel zu haben, sehen Sie sich die Datei requirements.txt von Odoo an.
Die requirements.txt
-Dateien von Untermodulen werden ebenfalls berücksichtigt. Die Plattform sucht in jedem Ordner, der Odoo-Module enthält, nach requirements.txt
-Dateien: Nicht im Modulordner selbst, sondern in ihrem übergeordneten Ordner.
Verzeichnisstruktur¶
Da die Container auf Ubuntu basieren, folgt ihre Verzeichnisstruktur dem Filesystem Hierarchy Standard von Linux. Die Baumübersicht des Ubuntu-Dateisystems erklärt die wichtigsten Verzeichnisse.
Hier sind die entsprechenden Verzeichnisse von 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
Sowohl Python 2.7 als auch 3.5 sind in den Containern installiert. Allerdings:
Wenn Ihr Projekt für die Verwendung von Odoo 10.0 konfiguriert ist, läuft der Odoo-Server mit Python 2.7.
Wenn Ihr Projekt für die Verwendung von Odoo 11.0 konfiguriert ist, läuft der Odoo-Server mit Python 3.5.
Datenbank-Shell¶
Wenn Sie über die Shell auf einen Container zugreifen, können Sie mit psql auf die Datenbank zugreifen.
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=>
Seien Sie vorsichtig! Verwenden Sie Transaktionen <https://www.postgresql.org/docs/current/static/sql-begin.html>`_ (BEGIN…COMMIT/ROLLBACK) für jede sql-Anweisung, die zu Änderungen führt (UPDATE, DELETE, ALTER, …), insbesondere für Ihre Produktionsdatenbank.
Der Transaktionsmechanismus ist Ihr Sicherheitsnetz für den Fall eines Fehlers. Sie müssen lediglich Ihre Änderungen rückgängig machen, um den vorherigen Zustand Ihrer Datenbank wiederherzustellen.
Es kann zum Beispiel passieren, dass Sie die WHERE-Bedingung vergessen.
odoo-addons-master-1=> BEGIN;
BEGIN
odoo-addons-master-1=> UPDATE res_users SET password = '***';
UPDATE 457
odoo-addons-master-1=> ROLLBACK;
ROLLBACK
In einem solchen Fall können Sie ein Rollback durchführen, um die unerwünschten Änderungen rückgängig zu machen, die Sie gerade versehentlich vorgenommen haben, und die Anweisung neu schreiben:
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
Vergessen Sie jedoch nicht, Ihre Transaktion entweder festzulegen oder zurückzusetzen, nachdem Sie sie durchgeführt haben. Offene Transaktionen können Datensätze in Ihren Tabellen sperren und Ihre laufende Datenbank kann darauf warten, dass diese freigegeben werden. Das kann dazu führen, dass ein Server auf unbestimmte Zeit hängen bleibt.
Außerdem sollten Sie, wenn möglich, Ihre Staging-Datenbanken verwenden, um Ihre Angaben zuerst zu testen. Das gibt Ihnen ein zusätzliches Sicherheitsnetz.
Einen Odoo-Server starten¶
Sie können eine Odoo-Serverinstanz von einer Container-Shell aus starten. Sie können dann zwar nicht von außen mit einem Browser darauf zugreifen, aber Sie können es zum Beispiel:
die Odoo-Shell verwenden,
$ 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'
ein Modul installieren,
$ odoo-bin -i sale --without-demo=all --stop-after-init
ein Modul aktualisieren,
$ odoo-bin -u sale --stop-after-init
die Tests für ein Modul durchführen,
$ odoo-bin -i sale --test-enable --log-level=test --stop-after-init
In den obigen Befehlen:
Das Argument
--without-demo=all
verhindert das Laden von Demodaten für alle ModuleDas Argument
--stop-after-init
wird die Serverinstanz sofort heruntergefahren, nachdem sie die von Ihnen gewünschten Vorgänge abgeschlossen hat.
Weitere Optionen sind verfügbar und werden in der Dokumentation zu Befehlszeilen beschrieben.
In den Protokollen (~/logs/odoo.log) finden Sie den Add-ons-Pfad, der von Odoo.sh zum Betrieb Ihres Servers verwendet wird. Suchen Sie nach „odoo: addons paths“:
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']
Sein Sie vorsichtig, insbesondere mit Ihrer Produktionsdatenbank! Vorgänge, die Sie mit dieser Odoo-Serverinstanz durchführen, sind nicht isoliert: Die Änderungen werden in der Datenbank wirksam. Führen Sie Ihre Tests immer in Ihren Staging-Datenbanken durch.
Fehlerbeseitigung in Odoo.sh¶
Die Fehlerbeseitigung eines Odoo.sh-Builds unterscheidet sich nicht wirklich von einer anderen Python-Anwendung. Dieser Artikel erläutert lediglich die Besonderheiten und Einschränkungen der Odoo.sh-Plattform und geht davon aus, dass Sie bereits wissen, wie man ein Fehlerbeseitigungsprogramm verwendet.
Bemerkung
Wenn Sie noch nicht wissen, wie Sie Fehler einer Python-Anwendung beseitigen, gibt es mehrere Einführungskurse, die ganz einfach im Internet auffindbar sind.
Sie können pdb
, pudb
oder ipdb
verwenden, um Fehler in Ihrem Code auf Odoo.sh zu beseitigen. Da der Server außerhalb einer Shell ausgeführt wird, können Sie das Fehlerbeseitigungsprogramm nicht direkt von Ihrem Odoo-Instanz-Backend aus starten, da das Fehlerbeseitigungsprogramm eine Shell benötigt, um zu funktionieren.
pdb ist standardmäßig in jedem Container installiert.
Wenn Sie pudb oder ipdb verwenden möchten, müssen Sie diese vorher installieren.
Dazu gibt es zwei Optionen:
temporär (nur im aktuellen Build):
$ pip install pudb --user
oder
$ pip install ipdb --user
permanent: Fügen Sie
pudb
oderipdb
zur Projektdateirequirements.txt
hinzu.
Sie können dann den Code bearbeiten, wo Sie das Fehlerbeseitigungsprogramm auslösen möchten und Folgendes verwenden:
import sys
if sys.__stdin__.isatty():
import pdb; pdb.set_trace()
Die Bedingung sys.__stdin__.isatty()
ist ein Hack, der erkennt, ob Sie Odoo aus einer Shell verwenden.
Speichern Sie die Datei und starten Sie dann die Odoo-Shell:
$ odoo-bin shell
Schließlich können Sie über die Odoo-Shell den Code/die Funktion/die Methode auslösen, deren Fehler Sie beseitigen möchten.