Fortgeschrittene Themen

Dieser Abschnitt behandelt erweiterte Funktionen von Odoo.sh im Zusammenhang mit Containern, Git-Submodulen und geplanten Aktionen.

Container

Jeder Build ist in seinem eigenen Container isoliert (Linux-Namespace-Container). Die Basis ist ein Ubuntu-basiertes System, auf dem alle erforderlichen Odoo-Abhängigkeiten sowie gängige, 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 Branches definieren, die diese auflistet. Die Plattform stellt sicher, dass diese Abhängigkeiten in Ihren Containern installiert werden.

Bemerkung

Die requirements.txt-Dateien von Submodulen werden ebenfalls berücksichtigt. Die Plattform sucht nach solchen Dateien im übergeordneten Ordner jedes Ordners, der ein Odoo-Modul enthält.

Verzeichnisstruktur

Da die Container auf Ubuntu basieren, folgt ihre Verzeichnisstruktur dem Filesystem Hierarchy Standard.

Die für Odoo.sh relevanten Verzeichnisse sind die folgenden:

.
├── home
│    └── odoo
│         ├── backup.daily
│         ├── 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
│         └── 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
└── usr
     ├── lib
     │    └── pythonX.XX
     │         └── dist-packages       Python X.XX standard libraries
     ├── local
     │    └── lib
     │         └── pythonX.XX
     │              └── dist-packages  Python X.XX third-party libraries
     └── usr
          └── bin
               └── pythonX.X           Python X.XX executable

Datenbank-Shell

Wenn Sie über die Shell auf einen Container zugreifen, können Sie mit dem Befehl psql auf die Datenbank zugreifen.

odoo@odoo-master-1.odoo.sh:~$ psql
psql (16.9)
Type "help" for help.

odoo-master-1=>

Warnung

Verwenden Sie immer Transaktionen (z. B. BEGIN (…) COMMIT / ROLLBACK), wenn eine SQL-Anweisung Änderungen bewirkt (z. B. UPDATE, DELETE, ALTER usw.), insbesondere bei Ihrer Produktionsdatenbank. Der Transaktionsmechanismus ist Ihr Sicherheitsnetz im Falle eines Fehlers. Sie müssen lediglich Ihre Änderungen zurückrollen, um Ihre Datenbank in den vorherigen Zustand zu versetzen.

Vergessen Sie nicht, Transaktionen zu committen oder zurückzurollen. Offene Transaktionen können Datensätze in Ihren Tabellen sperren, und eine laufende Datenbank kann darauf warten, dass diese freigegeben werden, wodurch ein Server unbegrenzt hängen bleiben kann.

Verwenden Sie zusätzlich Ihre Staging-Datenbanken, um Ihre Anweisungen zunächst zu testen. Das gibt Ihnen ein zusätzliches Sicherheitsnetz.

Example

Sie haben vergessen, Ihre WHERE-Bedingung festzulegen. In diesem Fall können Sie ein Rollback durchführen, um die unerwünschte Änderung rückgängig zu machen:

odoo-master-1=> BEGIN;
BEGIN
odoo-master-1=> UPDATE res_users SET password = '***';
UPDATE 457
odoo-master-1=> ROLLBACK;
ROLLBACK

Schreiben Sie dann die Anweisung neu und committen Sie die Änderung:

odoo-master-1=> BEGIN;
BEGIN
odoo-master-1=> UPDATE res_users SET password = '***' WHERE id = 1;
UPDATE 1
odoo-master-1=> COMMIT;
COMMIT

Einen Odoo-Server starten

Sie können eine Odoo-Serverinstanz über eine Container-Shell starten. Sie können nicht von außen mit einem Webbrowser darauf zugreifen, aber Sie können zum Beispiel:

  • Use the 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'
    
  • Install a module:

    odoo-bin -i sale --without-demo=all --stop-after-init
    

    Tipp

    • The argument --without-demo=all prevents demo data from being loaded for all modules.

    • The argument --stop-after-init immediately shutdowns the server instance after the operation is completed.

  • Update a module:

    odoo-bin -u sale --stop-after-init
    
  • Run the tests for a module:

    odoo-bin -i sale --test-enable --log-level=test --stop-after-init
    

Siehe auch

CLI documentation

To find the addons path used by Odoo.sh to run your server, look for „odoo: addons paths“ in the logs (~/logs/odoo.log).

2025-02-19 10:51:39,267 4 INFO ? odoo: Odoo version 18.0
2025-02-19 10:51:39,268 4 INFO ? odoo: Using configuration file at /home/odoo/.config/odoo/odoo.conf
2025-02-19 10:51:39,268 4 INFO ? odoo: addons paths: ['/home/odoo/data/addons/18.0', '/home/odoo/src/user', '/home/odoo/src/enterprise', '/home/odoo/src/themes', '/home/odoo/src/odoo/addons', '/home/odoo/src/odoo/odoo/addons']

Warnung

Operations you perform on an Odoo server instance are not isolated; changes will be reflected in the database. Remember to always carry out tests in your staging databases.

Fehlerbeseitigung in Odoo.sh

Bemerkung

Debugging an Odoo.sh build is not really different from debugging another Python app. As such, the goal of this section is to cover the specificities and limitations of the Odoo.sh platform, and assumes that you already know how to use a debugger.

You can use pdb, pudb, or ipdb to debug code on Odoo.sh. Since the server runs outside a shell, you cannot launch the debugger directly from your Odoo backend, as it requires a shell to operate.

pdb ist standardmäßig in jedem Container installiert.

Tipp

To use pudb or ipdb, it is necessary to install them either:

  • permanently by adding pudb or ipdb to your project’s requirements.txt file, or

  • temporarily (only in the current build) by running the relevant command:

    pip install pudb --user
    
    pip install ipdb --user
    
  1. To trigger the debugger, add this to the code you want to debug:

    import sys
    if sys.__stdin__.isatty():
        import pdb; pdb.set_trace()
    

    Bemerkung

    The condition sys.__stdin__.isatty() is a workaround for detecting whether you are running Odoo from a shell.

  2. Next, save the file and run the Odoo shell:

    odoo-bin shell
    
  3. Use the Odoo shell to trigger the code you want to debug.

    pdb running in an Odoo.sh shell

Untermodule

Git submodules let you link external repositories directly into your project without copy-pasting code, streamlining deployment by cloning dependencies alongside your main codebase. You maintain precise version control by choosing exact branches and pinning specific commit revisions to update whenever you choose.

Auf Odoo.sh erkennt die Plattform Submodule automatisch und fügt sie Ihrem Addons-Pfad für die Datenbankinstallation hinzu, vorausgesetzt Sie konfigurieren einen Deploy-Key in Ihren Projekt- und Repository-Einstellungen, wenn Sie private Repositorys integrieren.

Ein Untermodul hinzufügen

Bemerkung

Derzeit ist es nicht möglich, private Repositorys mit Odoo.sh hinzuzufügen. Mit Git können Sie dies dennoch tun.

  1. Wählen Sie in der Ansicht Branches Ihres Odoo.sh-Projekts den Branch aus, dem Sie ein Submodul hinzufügen möchten.

  2. Klicken Sie oben rechts auf Submodul und dann auf Auf Odoo.sh ausführen.

  3. Füllen Sie im Dialogfeld folgende Angaben aus:

    • Repository-URL: die SSH-URL des Repositorys

      Tipp

      Klicken Sie auf GitHub auf Clone, wählen Sie SSH aus und kopieren Sie die URL.

    • Branch: der spezifische Branch, der verwendet werden soll

    • Pfad: der Ordner, in dem das Submodul in Ihrem Branch hinzugefügt werden soll

Tipp

Wenn Sie ein Repository hinzufügen, das viele Module enthält, möchten Sie möglicherweise einige davon ignorieren, falls sie automatisch installiert werden. Versehen Sie dazu Ihren Submodul-Ordner mit dem Präfix . (z. B. .folder). Die Plattform ignoriert diesen Ordner, und Sie können die Module gezielt auswählen, indem Sie symbolische Links von einem anderen Ordner aus zu ihnen erstellen.

Geplante Aktionen

Auf der Odoo.sh-Plattform werden geplante Aktionen etwas anders als auf einem regulären Odoo-Server implementiert und nach bestem Ermessen ausgeführt. Der Grund dafür ist, dass sich möglicherweise mehrere Kunden denselben Server teilen und jedem Kunden ein fairer Anteil an den Serverressourcen garantiert wird. Daher kann keine genaue Ausführungszeit für geplante Aktionen garantiert werden.

Wichtig

Erwarten Sie nicht, dass eine geplante Aktion öfter als alle fünf Minuten ausgeführt wird.

As the execution time of scheduled actions is limited, it is advised to ensure your scheduled actions:

  • Work on small batches of records.

  • Commit their work after processing each batch so that if they are interrupted by the time limit, they do not need to start over.

  • Are idempotent, i.e, they must not cause side effects if they are started more often than expected.