Avancerade ämnen

Denna sektion täcker avancerade funktioner i Odoo.sh relaterade till containrar, Git-undermoduler och schemalagda åtgärder.

Behållare

Varje bygge är isolerat i en egen container (Linux-namnrymdscontainer). Basen är ett Ubuntu-baserat system där alla Odoos obligatoriska beroenden, såväl som vanliga och användbara paket, är installerade.

Om ditt projekt kräver ytterligare Python-beroenden eller nyare tidigare utgåvor kan du definiera en requirements.txt-fil i roten på dina grenar som listar dem. Plattformen ser till att dessa beroenden installeras i dina containrar.

Se även

Observera

Även requirements.txt-filerna för undermoduler beaktas. Plattformen letar efter sådana filer i den överordnade mappen för varje mapp som innehåller en Odoo-modul.

Struktur för katalog

Eftersom containrarna är Ubuntu-baserade följer deras registerstruktur Filesystem Hierarchy Standard.

De register som är relevanta för Odoo.sh är följande:

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

Databasskal

När du ansluter till en container via skalet kan du komma åt databasen med kommandot psql.

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

odoo-master-1=>

Varning

Använd alltid transaktioner (t.ex. BEGIN (…) COMMIT / ROLLBACK) när en SQL-sats leder till ändringar (t.ex. UPDATE, DELETE, ALTER osv.), särskilt för din produktionsdatabas. Transaktionsmekanismen är ditt skyddsnät vid eventuella misstag. Du behöver bara rulla tillbaka dina ändringar för att återställa databasen till dess tidigare tillstånd.

Glöm inte att verkställa eller rulla tillbaka transaktioner. Öppna transaktioner kan låsa poster i dina tabeller, och en databas i drift kan vänta på att de ska frigöras, vilket kan leda till att servern hänger sig på obestämd tid.

Använd dessutom dina staging-databaser för att testa dina satser först. Det ger dig ett extra skyddsnät.

Example

Du glömde att ange ditt WHERE-villkor. I ett sådant fall kan du göra en rollback för att ångra den oönskade ändringen:

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

Skriv sedan om satsen och verkställ ändringen:

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

Du kan starta en Odoo-serverinstans från ett containerskal. Du kommer inte att kunna nå den utifrån med en webbläsare, men du kan till exempel:

  • 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.

Eftersom körtiden för schemalagda åtgärder är begränsad, rekommenderas att se till att dina schemalagda åtgärder:

  • Arbetar med små batcher av poster.

  • Checkar in sitt arbete efter att ha bearbetat varje batch, så att de inte behöver börja om från början om de avbryts av tidsgränsen.

  • Är idempotenta, dvs. de får inte orsaka sidoeffekter om de startas oftare än förväntat.

Byte av IP-adress

**När IP-adressen för en produktionsinstans ändras görs dessutom en HTTP GET-begäran till sökvägen /_odoo.sh/ip-change med den nya IP-adressen inkluderad som en parameter för frågesträngen (new), tillsammans med den tidigare IP-adressen som en ytterligare parameter (old).

Denna mekanism gör det möjligt att utlösa anpassade åtgärder som svar på ändringen av IP-adress (t.ex. skicka ett e-postmeddelande, kontakta ett brandväggs-API, konfigurera databasobjekt osv.).

Av säkerhetsskäl är rutten /_odoo.sh/ip-change endast tillgänglig internt av plattformen själv och returnerar ett 403-svar om den nås på något annat sätt.

Här är ett exempel på en pseudo-implementering:

class IPChangeController(http.Controller):

    @http.route('/_odoo.sh/ip-change', auth='public')
    def ip_change(self, old=None, new=None):
        _logger.info("IP address changed from %s to %s", old, new)
        # Then perform whatever action is required for your use case, e.g., update an
        # ir.config_parameter, send an email, contact an external firewall service's API, ...
        return 'ok'