Behållare

Översikt

Varje byggnation är isolerad i sin egen container (Linux namespaced container).

Basen är ett Ubuntu-system, där alla Odoos nödvändiga beroenden, liksom vanliga användbara paket, är installerade.

Om ditt projekt kräver ytterligare Python-beroenden, eller nyare utgåvor, kan du definiera en requirements.txt-fil i roten av dina grenar som listar dem. Plattformen kommer att se till att installera dessa beroenden i dina behållare. Dokumentationen pip requirements specifiers kan hjälpa dig att skriva en requirements.txt-fil. För att få ett konkret exempel, kolla in filen requirements.txt för Odoo.

Filerna requirements.txt för undermoduler tas också med i beräkningen. Plattformen letar efter requirements.txt-filer i varje mapp som innehåller Odoo-moduler: Inte i själva modulmappen, utan i deras överordnade mapp.

Struktur för katalog

Eftersom behållarna är Ubuntu-baserade följer deras katalogstruktur Linux Filesystem Hierarchy Standard. I Ubuntus filsystemträdsöversikt <https://help.ubuntu.com/community/LinuxFilesystemTreeOverview#Main_directories>`_ förklaras de viktigaste katalogerna.

Här är de relevanta katalogerna för 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

Både Python 2.7 och 3.5 är installerade i containrarna. Det är dock inte så:

  • Om ditt projekt är konfigurerat för att använda Odoo 10.0 körs Odoo-servern med Python 2.7.

  • Om ditt projekt är konfigurerat för att använda Odoo 11.0 eller senare körs Odoo-servern med Python 3.5.

Databasskal

När du öppnar en container med skalet kan du komma åt databasen med 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=>

Var försiktig ! Använd transaktioner (BEGIN…COMMIT/ROLLBACK) för alla sql-satser som leder till ändringar (UPDATE, DELETE, ALTER, …), särskilt för din produktionsdatabas.

Transaktionsmekanismen är ditt skyddsnät i händelse av misstag. Du behöver bara återställa dina ändringar för att återställa din databas till dess tidigare tillstånd.

Det kan till exempel hända att du glömmer att ange ditt WHERE-villkor.

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

I ett sådant fall kan du rulla tillbaka för att återställa de oönskade ändringar som du just gjorde av misstag och skriva om uttalandet:

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

Glöm dock inte att antingen göra en commit eller rollback efter att du har gjort transaktionen. Öppna transaktioner kan låsa poster i dina tabeller och din körande databas kan vänta på att de ska släppas. Det kan leda till att en server hänger sig på obestämd tid.

Dessutom, när det är möjligt, använd dina staging-databaser för att testa dina uttalanden först. Det ger dig ett extra skyddsnät.

Kör en Odoo-server

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

  • använda 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
  • uppdatera en modul,

$  odoo-bin -u sale --stop-after-init
  • köra testerna för en modul,

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

I ovanstående kommandon är argumentet:

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

  • --stop-after-init kommer omedelbart att stänga av serverinstansen efter att den har slutfört de åtgärder du bad om.

Fler alternativ finns tillgängliga och beskrivs i CLI-dokumentationen.

I loggarna (~/logs/odoo.log) hittar du sökvägen för tillägg som används av Odoo.sh för att köra din server. Leta efter ”odoo: addons paths”:

2018-02-19 10:51:39,267 4 INFO ? odoo: Odoo version 18.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/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']

Var försiktig, särskilt med din produktionsdatabas. Operationer som du utför när du kör den här Odoo-serverinstansen är inte isolerade: Ändringar kommer att vara effektiva i databasen. Gör alltid dina tester i dina staging-databaser.

Felsökning i Odoo.sh

Att felsöka en Odoo.sh-byggnad skiljer sig egentligen inte från en annan Python-app. Den här artikeln förklarar endast särdragen och begränsningarna i Odoo.sh-plattformen och förutsätter att du redan vet hur man använder en debugger.

Observera

Om du inte vet hur man felsöker en Python-applikation ännu finns det flera introduktionskurser som lätt kan hittas på Internet.

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

  • pdb installeras som standard i alla behållare.

  • Om du vill använda pudb eller ipdb måste du installera det innan.

    För att göra det har du två alternativ:

    • tillfällig (endast i den aktuella versionen):

      $  pip install pudb --user
      

      eller

      $  pip install ipdb --user
      
    • permanent: lägg till pudb eller ipdb i ditt projekts fil requirements.txt.

Redigera sedan koden där du vill trigga debuggern och lägg till detta:

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

Villkoret sys.__stdin__.isatty() är ett hack som upptäcker om du kör Odoo från ett skal.

Spara filen och kör sedan Odoo Shell:

$ odoo-bin shell

Slutligen kan du, via Odoo Shell, trigga den kod/funktion/metod som du vill felsöka.

Konsolskärmdump som visar ``pdb`` som körs i ett Odoo.sh-skal.