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
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 kan du, via Odoo Shell, trigga den kod/funktion/metod som du vill felsöka.
