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 sau ipdb în fișierul dvs. de proiect requirements.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.

Captură de ecran a consolii care arată ``pdb`` care rulează într-o shell Odoo.sh.