Containere¶
Prezentare generală¶
Fiecare build este izolat într-un container propriu (container Linux cu namespace).
Baza este un sistem Ubuntu, unde toate dependințele necesare Odoo, precum și pachetele utile comune, sunt instalate.
Dacă proiectul dvs. necesită dependințe Python suplimentare, sau versiuni mai recente, puteți defini un fișier requirements.txt
în rădăcina branch-urilor dvs. și le puteți lista. Platforma se va ocupa să instaleze aceste dependințe în containerele dvs. Documentația The pip requirements specifiers vă poate ajuta să scrieți un fișier requirements.txt
.
Fișierele requirements.txt
ale submodulelor sunt luate în considerare de asemenea. Platforma caută fișierele requirements.txt
în fiecare dosar care conține module Odoo: Nu în dosarul modulului în sine, ci în dosarul părinte.
Structura directoarelor¶
Deoarece containerele sunt bazate pe Ubuntu, structura lor de directoare urmează standardul linux Filesystem Hierarchy. Prezentarea generală a arborilor de fișiere Ubuntu explică directoarele principale.
Iată directoarele relevante 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
Atât Python 2.7 cât și 3.5 sunt instalate în containere. Cu toate acestea:
Dacă proiectul dvs. este configurat pentru a utiliza Odoo 10.0, serverul Odoo rulează cu Python 2.7.
Dacă proiectul dvs. este configurat pentru a utiliza Odoo 11.0 sau mai sus, serverul Odoo rulează cu Python 3.5.
Shell baza de date¶
În timp ce accesați un container cu shell-ul, puteți accesa baza de date folosind 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=>
Fii atent! Folosește tranzacții (BEGIN…COMMIT/ROLLBACK) pentru fiecare declarație sql care duce la modificări (UPDATE, DELETE, ALTER, …), în special pentru baza de date de producție.
Mechanismul de tranzacție este sprijinul dvs. în caz de greșeală. Trebuie doar să anulați modificările pentru a vă întoarce baza de date la starea anterioară.
De exemplu, se poate întâmpla să uitați să setați condiția WHERE.
odoo-addons-master-1=> BEGIN;
BEGIN
odoo-addons-master-1=> UPDATE res_users SET password = '***';
UPDATE 457
odoo-addons-master-1=> ROLLBACK;
ROLLBACK
Într-un astfel de caz, puteți anula pentru a vă întoarce modificările neplăcute pe care le-ați făcut greșit, și rescrieți declarația:
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
Cu toate acestea, nu uitați să comiteți sau să anulați tranzacția după ce ați făcut-o. Tranzacțiile deschise pot bloca înregistrările în tabelele dvs. și baza de date care rulează poate aștepta ca ele să fie eliberate. Acest lucru poate provoca blocarea serverului.
În plus, când este posibil, utilizați bazele de date de stagiu pentru a testa primele declarații. Vă oferă un sprijin suplimentar.
Rulează un server Odoo¶
Puteți porni o instanță de server Odoo dintr-un shell de container. Nu veți putea să accesați din lumea exterioară cu un browser, dar puteți de exemplu:
folosiți shell-ul Odoo,
$ 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'
instalați un modul,
$ odoo-bin -i sale --without-demo=all --stop-after-init
actualizați un modul,
$ odoo-bin -u sale --stop-after-init
rulează testele pentru un modul,
$ odoo-bin -i sale --test-enable --log-level=test --stop-after-init
În comenzile de mai sus, argumentul:
--without-demo=all
previne încărcarea datelor demo pentru toate modulele--stop-after-init
va opri imediat instanța serverului după ce a finalizat operațiile pe care le-ați solicitat.
Mai multe opțiuni sunt disponibile și detaliate în documentația CLI.
Puteți găsi în jurnale (~/logs/odoo.log) calea addon-urilor utilizate de Odoo.sh pentru a rula serverul dvs. Căutați „odoo: calea addon-urilor”:
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']
Fii atent, în special cu baza de date a producției. Operațiunile pe care le efectuați rulând această instanță de server Odoo nu sunt izolate: Modificările vor fi efective în baza de date. Întotdeauna, faceți testele în bazele de date de stagiu.
Depanarea în Odoo.sh¶
Depanarea unei construcții Odoo.sh nu este deloc diferită de o altă aplicație Python. Acest articol explică doar specificitățile și limitările platformei Odoo.sh, și presupune că deja știți cum să utilizați un debugger.
Notă
Dacă nu știți încă cum să depanați o aplicație Python, există mai multe cursuri introductive care pot fi ușor găsite pe Internet.
Puteți utiliza pdb
, pudb
sau ipdb
pentru a depana codul dvs. în Odoo.sh. Deoarece serverul este rulat în afara unei shell-uri, nu puteți lansa debugger-ul direct din backend-ul instanței dvs. Odoo, deoarece debugger-ul are nevoie de o shell pentru a funcționa.
pdb este instalat în mod implicit în fiecare container.
Dacă doriți să utilizați pudb sau ipdb trebuie să-l instalați înainte.
Pentru a face acest lucru, aveți două opțiuni:
temporar (doar în construcția curentă):
$ pip install pudb --user
sau
$ pip install ipdb --user
permanent: adăugați
pudb
sauipdb
în fișierul dvs. de proiectrequirements.txt
.
Apoi editați codul unde doriți să declanșați debugger-ul și adăugați acesta:
import sys
if sys.__stdin__.isatty():
import pdb; pdb.set_trace()
Condiția sys.__stdin__.isatty()
este un hack care detectează dacă rulați Odoo dintr-o shell.
Salvați fișierul și apoi rulați Odoo Shell:
$ odoo-bin shell
În cele din urmă, prin Odoo Shell, puteți declanșa bucata de cod/funcție/metodă pe care doriți să o depanați.