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
elleripdb
i ditt projekts filrequirements.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.