Behållare

Översikt

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

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

Om ditt projekt kräver ytterligare Python-beroenden, eller nyare versioner, 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. Om du vill ha ett konkret exempel kan du 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.

Katalogstruktur

Eftersom containrarna är Ubuntu-baserade följer deras katalogstruktur linux Filesystem Hierarchy Standard. Ubuntus översikt över filsystemets träd förklarar 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 behållarna. Dock:

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

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

Skal för databas

När du använder skalet för att komma åt en container kan du använda psql för att komma åt databasen.

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 rulla tillbaka dina ändringar för att återställa databasen 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 gå tillbaka för att återställa de oönskade ändringar som du av misstag just gjorde 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 commit eller rollbacka din transaktion efter att du har gjort den. Ö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 få en server att hänga sig på obestämd tid.

När det är möjligt bör du dessutom använda dina staging-databaser för att testa dina uttalanden först. Det ger dig ett extra säkerhetsnä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 t.ex:

  • 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 att stänga av serverinstansen omedelbart efter att den har slutfört de åtgärder du bad om.

Fler alternativ finns tillgängliga och beskrivs i CLI dokumentation.

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

2018-02-19 10:51:39,267 4 INFO ? odoo: Odoo version 16.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/16.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. Åtgärder som du utför när du kör denna Odoo-serverinstans är inte isolerade: Ändringar kommer att vara effektiva i databasen. Gör alltid dina tester i dina staging-databaser.

Felsökning i Odoo.sh

Felsökning av en Odoo.sh-byggnad skiljer sig egentligen inte från en annan Python-app. Den här artikeln förklarar bara särdragen och begränsningarna för Odoo.sh-plattformen, och förutsätter att du redan vet hur man använder en felsökare.

Observera

Om du ännu inte vet hur man felsöker en Python-applikation finns det flera introduktionskurser som enkelt 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 detta 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, via Odoo Shell, kan du trigga den kod/funktion/metod som du vill felsöka.

Skärmdump från konsolen som visar ``pdb`` som körs i ett Odoo.sh-skal.