Konténerek¶
Áttekintés¶
Minden build saját konténerében (Linux névtérrel rendelkező konténer) van elkülönítve.
Az alap egy Ubuntu rendszer, ahol az Odoo összes szükséges függősége, valamint általános hasznos csomagok vannak telepítve.
If your project requires additional Python dependencies, or more recent releases,
you can define a requirements.txt file in the root of your branches listing them.
The platform will take care to install these dependencies in your containers.
The pip requirements specifiers
documentation can help you write a requirements.txt file.
To have a concrete example,
check out the requirements.txt file of Odoo.
A szubmodulok requirements.txt fájljait is figyelembe veszik. A platform az Odoo modulokat tartalmazó mappákban keresi a requirements.txt fájlokat: Nem magában a modul mappájában, hanem a szülő mappájukban.
Könyvtárstruktúra¶
Mivel a konténerek Ubuntu alapúak, könyvtárstruktúrájuk követi a linux Fájlrendszer Hierarchia Szabványt. Ubuntu fájlrendszer fa áttekintése magyarázza a fő könyvtárakat.
Itt vannak az Odoo.sh releváns könyvtárai:
.
├── 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
Mind a Python 2.7, mind a 3.5 telepítve van a konténerekben. Azonban:
Ha a projektje Odoo 10.0 használatára van konfigurálva, az Odoo szerver Python 2.7-tel fut.
Ha a projektje Odoo 11.0 vagy újabb verzió használatára van konfigurálva, az Odoo szerver Python 3.5-tel fut.
Adatbázis shell¶
Amikor a shell segítségével hozzáfér egy konténerhez, az adatbázist psql használatával érheti el.
[email protected]:~$ 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=>
Legyen óvatos! Használjon tranzakciókat (BEGIN…COMMIT/ROLLBACK) minden sql utasításhoz, amely változásokat eredményez (UPDATE, DELETE, ALTER, …), különösen a termelési adatbázis esetében.
A tranzakciós mechanizmus a biztonsági hálója hibák esetén. Egyszerűen vissza kell vonnia a változtatásait, hogy visszaállítsa az adatbázist az előző állapotába.
Például előfordulhat, hogy elfelejti beállítani a WHERE feltételt.
odoo-addons-master-1=> BEGIN;
BEGIN
odoo-addons-master-1=> UPDATE res_users SET password = '***';
UPDATE 457
odoo-addons-master-1=> ROLLBACK;
ROLLBACK
Ilyen esetben visszaállíthatja a nem kívánt változtatásokat, amelyeket véletlenül végrehajtott, és újraírhatja a kifejezést:
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
Azonban ne felejtse el elkötelezni vagy visszavonni a tranzakcióját, miután ezt megtette. A nyitott tranzakciók zárolhatják a rekordokat a tábláiban, és a futó adatbázis várhat a felszabadításukra. Ez a szerver végtelen ideig tartó lefagyását okozhatja.
Ezenkívül, ha lehetséges, használja a tesztelési adatbázisait a kifejezések előzetes tesztelésére. Ez egy extra biztonsági hálót nyújt.
Odoo szerver futtatása¶
Odoo szerver példányt indíthat egy konténer shellből. Nem fogja tudni elérni a külvilágból böngészővel, de például megteheti:
használja az Odoo shellt,
$ odoo-bin shell
>>> partner = env['res.partner'].search([('email', '=', '[email protected]')], limit=1)
>>> partner.name
'ASUSTeK'
>>> partner.name = 'Odoo'
>>> env['res.partner'].search([('email', '=', '[email protected]')], limit=1).name
'Odoo'
telepítsen egy modult,
$ odoo-bin -i sale --without-demo=all --stop-after-init
frissítsen egy modult,
$ odoo-bin -u sale --stop-after-init
futtassa a teszteket egy modulhoz,
$ odoo-bin -i sale --test-enable --log-level=test --stop-after-init
A fenti parancsokban az argumentum:
--without-demo=allmegakadályozza, hogy a demó adatok betöltődjenek az összes modulhoz--stop-after-initazonnal leállítja a szerver példányt, miután befejezte a kért műveleteket.
További lehetőségek elérhetők és részletezve vannak a CLI dokumentációban.
You can find in the logs (~/logs/odoo.log) the addons path used by Odoo.sh to run your server. Look for „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']
Legyen óvatos, különösen a termelési adatbázisával. Az Odoo szerver példány futtatása során végzett műveletek nincsenek elszigetelve: A változások hatással lesznek az adatbázisra. Mindig végezze el a teszteket a tesztelési adatbázisaiban.
Hibakeresés az Odoo.sh-ban¶
Az Odoo.sh build hibakeresése nem igazán különbözik egy másik Python alkalmazástól. Ez a cikk csak az Odoo.sh platform sajátosságait és korlátait magyarázza el, és feltételezi, hogy már tudja, hogyan kell használni egy hibakeresőt.
Megjegyzés
Ha még nem tudja, hogyan kell hibakeresni egy Python alkalmazást, számos bevezető tanfolyam található könnyen az interneten.
Használhatja a pdb, pudb vagy ipdb eszközöket a kód hibakeresésére az Odoo.sh-ban. Mivel a szerver egy shell-en kívül fut, nem indíthatja el közvetlenül a hibakeresőt az Odoo példány háttérből, mivel a hibakeresőnek szüksége van egy shell-re a működéshez.
pdb alapértelmezetten telepítve van minden konténerben.
Ha a pudb vagy ipdb használatát tervezi, először telepítenie kell azt.
Ehhez két lehetősége van:
ideiglenes (csak az aktuális buildben):
$ pip install pudb --user
vagy
$ pip install ipdb --user
állandó: adja hozzá a
pudbvagyipdbcsomagot a projektrequirements.txtfájljához.
Ezután szerkessze a kódot ott, ahol a hibakeresőt szeretné elindítani, és adja hozzá ezt:
import sys
if sys.__stdin__.isatty():
import pdb; pdb.set_trace()
A sys.__stdin__.isatty() feltétel egy trükk, amely érzékeli, ha az Odoo-t egy shellből futtatja.
Mentse el a fájlt, majd futtassa az Odoo Shell-t:
$ odoo-bin shell
Végül az Odoo Shell-en keresztül elindíthatja azt a kódrészletet/funkciót/metódust, amelyet hibakeresni szeretne.