Advanced topics

This section covers advanced features of Odoo.sh related to containers, Git submodules, and scheduled actions.

Behållare

Each build is isolated in its own container (Linux namespace container). The base is an Ubuntu-based system on which all of Odoo’s required dependencies, as well as common, useful packages, are installed.

If your project requires additional Python dependencies or more recent releases, you can define a requirements.txt file at the root of your branches that lists them. The platform will ensure these dependencies are installed in your containers.

Se även

Observera

The requirements.txt files of submodules are also taken into account. The platform looks for such files in the parent folder of each folder containing an Odoo module.

Katalogstruktur

As the containers are Ubuntu-based, their directory structure follows the Filesystem Hierarchy Standard.

The directories relevant to Odoo.sh are the following:

.
├── 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

Skal för databas

While accessing a container with the shell, you can access the database using the psql command.

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

odoo-master-1=>

Varning

Always use transactions (e.g., BEGIN (…) COMMIT / ROLLBACK) when an SQL statement leads to changes (e.g., UPDATE, DELETE, ALTER, etc.) , especially for your production database. The transaction mechanism is your safety net in case of a mistake. You simply have to rollback your changes to revert your database to its previous state.

Do not forget to commit or roll back transactions. Open transactions may lock records in your tables, and a running database may wait for them to be released, causing a server to hang indefinitely.

In addition, use your staging databases to test your statements first. It gives you an extra safety net.

Example

You forgot to set your WHERE condition. In such a case, you can rollback to revert the unwanted change:

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

Then, rewrite the statement and commit the change:

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

Kör en Odoo-server

You can start an Odoo server instance from a container shell. You won’t be able to access it from the outside world with a web browser, but you can, for example:

  • Använd Odoo-skalet:

    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'
    
  • Installera en modul:

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

    Tips

    • Argumentet --without-demo=all förhindrar att demodata laddas för alla moduler.

    • Argumentet --stop-after-init stänger omedelbart av serverinstansen när operationen är slutförd.

  • Uppgradera en modul:

    odoo-bin -u sale --stop-after-init
    
  • Kör testerna för en modul:

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

För att hitta sökvägen till addons som Odoo.sh använder för att köra din server, leta efter ”odoo: addons paths” i loggarna (~/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']

Varning

Operationer du utför på en Odoo-serverinstans är inte isolerade; ändringar kommer att återspeglas i databasen. Kom ihåg att alltid utföra tester i dina staging-databaser.

Felsökning i Odoo.sh

Observera

Felsökning av en Odoo.sh-build skiljer sig egentligen inte från felsökning av en annan Python-app. Målet med denna sektion är därför att täcka de specifika egenskaperna och begränsningarna hos Odoo.sh-plattformen, och den förutsätter att du redan vet hur man använder en felsökare.

Du kan använda pdb, pudb eller ipdb för att felsöka kod på Odoo.sh. Eftersom servern körs utanför ett skal kan du inte starta felsökaren direkt från din Odoo-backend, eftersom det kräver ett skal för att fungera.

pdb installeras som standard i alla behållare.

Tips

För att använda pudb eller ipdb är det nödvändigt att installera dem antingen:

  • permanent genom att lägga till pudb eller ipdb i projektets requirements.txt-fil, eller

  • tillfälligt (endast i det aktuella bygget) genom att köra relevant kommando:

    pip install pudb --user
    
    pip install ipdb --user
    
  1. För att utlösa felsökaren, lägg till detta i koden du vill felsöka:

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

    Observera

    Villkoret sys.__stdin__.isatty() är en lösning för att upptäcka om du kör Odoo från ett skal.

  2. Spara sedan filen och kör Odoo-skalet:

    odoo-bin shell
    
  3. Använd Odoo-skalet för att utlösa koden du vill felsöka.

    pdb som körs i ett Odoo.sh-skal

Undermoduler

Git submodules låter dig länka externa arkiv direkt in i ditt projekt utan att kopiera och klistra in kod, vilket effektiviserar driftsättningen genom att klona beroenden tillsammans med din huvudkodbas. Du behåller exakt versionskontroll genom att välja specifika grenar och låsa fast specifika commit-revisioner att uppdatera när du väljer.

På Odoo.sh identifierar plattformen automatiskt undermoduler och lägger till dem i din tilläggssökväg för databasinstallation, förutsatt att du konfigurerar en distributionsnyckel i dina inställningar för projekt och repository när du integrerar privata repositories.

Lägga till en undermodul

Observera

För närvarande är det inte möjligt att lägga till privata repositories med Odoo.sh. Du kan dock göra det med Git.

  1. Från Filialer-vyn i ditt Odoo.sh-projekt väljer du den filial där du vill lägga till en undermodul.

  2. I det övre högra hörnet klickar du på Undermodul, sedan på Kör på Odoo.sh.

  3. Fyll i följande i dialogrutan:

    • URL till repository: SSH-URL:en till repositoryn

      Tips

      På GitHub klickar du på Clone, väljer SSH och kopierar URL:en.

    • Filial: den specifika filial som ska användas

    • Sökväg: mappen som undermodulen ska läggas till i på din filial

Tips

När du lägger till en repository som innehåller många moduler kan det vara bra att ignorera vissa av dem om de installeras automatiskt. Gör detta genom att lägga till . som prefix på din undermodulmapp (t.ex. .folder). Plattformen kommer att ignorera denna mapp, och du kan själv välja ut modulerna genom att skapa symboliska länkar till dem från en annan mapp.

Schemalagda åtgärder

På Odoo.sh-plattformen är schemalagda åtgärder implementerade något annorlunda jämfört med en vanlig Odoo-server och körs enligt bästa förmåga. Detta beror på att det kan finnas flera kunder på samma server, och varje kund garanteras en rättvis andel av serverns resurser. Därför kan en exakt körtid för schemalagda åtgärder inte garanteras.

Viktigt

Förvänta dig inte att någon schemalagd åtgärd körs oftare än var femte minut.

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.