Subiecte avansate

Această secțiune acoperă funcțiile avansate ale Odoo.sh legate de containere, submodule Git și acțiuni programate.

Containere

Fiecare build este izolat în propriul container (container de tip Linux namespace). Baza este un sistem bazat pe Ubuntu pe care sunt instalate toate dependențele necesare Odoo, precum și pachete comune, utile.

Dacă proiectul dvs. necesită dependențe Python suplimentare sau versiuni mai recente, puteți defini un fișier requirements.txt la rădăcina ramurilor dvs. care le enumeră. Platforma se va asigura că aceste dependențe sunt instalate în containerele dvs.

Vedeți și

Notă

Fișierele requirements.txt ale submodulelor sunt de asemenea luate în considerare. Platforma caută astfel de fișiere în dosarul părinte al fiecărui dosar care conține un modul Odoo.

Structura directoarelor

Deoarece containerele sunt bazate pe Ubuntu, structura lor de directoare respectă Filesystem Hierarchy Standard.

Directoarele relevante pentru Odoo.sh sunt următoarele:

.
├── home
│    └── odoo
│         ├── backup.daily
│         ├── 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
│         └── 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
└── usr
     ├── lib
     │    └── pythonX.XX
     │         └── dist-packages       Python X.XX standard libraries
     ├── local
     │    └── lib
     │         └── pythonX.XX
     │              └── dist-packages  Python X.XX third-party libraries
     └── usr
          └── bin
               └── pythonX.X           Python X.XX executable

Shell baza de date

Când accesați un container prin shell, puteți accesa baza de date folosind comanda psql.

odoo@odoo-master-1.odoo.sh:~$ psql
psql (16.9)
Type "help" for help.

odoo-master-1=>

Atenționare

Folosiți întotdeauna tranzacții (de ex., BEGIN (…) COMMIT / ROLLBACK) atunci când o instrucțiune SQL duce la modificări (de ex., UPDATE, DELETE, ALTER, etc.), în special pentru baza de date de producție. Mecanismul de tranzacții este plasa dvs. de siguranță în caz de greșeală. Trebuie doar să faceți rollback la modificări pentru a readuce baza de date la starea anterioară.

Nu uitați să faceți commit sau rollback la tranzacții. Tranzacțiile deschise pot bloca înregistrări din tabelele dvs., iar o bază de date activă poate aștepta eliberarea acestora, ceea ce poate face ca un server să rămână blocat la nesfârșit.

În plus, folosiți bazele de date de testare pentru a testa mai u00entâi instrucțiunile dvs. Aceasta vă oferă o plasă de siguranță suplimentară.

Example

Ați uitat să setați condiția WHERE. În acest caz, puteți face rollback pentru a anula modificarea nedorită:

odoo-master-1=> BEGIN;
BEGIN
odoo-master-1=> UPDATE res_users SET password = '***';
UPDATE 457
odoo-master-1=> ROLLBACK;
ROLLBACK

Apoi, rescrieți instrucțiunea și faceți commit la modificare:

odoo-master-1=> BEGIN;
BEGIN
odoo-master-1=> UPDATE res_users SET password = '***' WHERE id = 1;
UPDATE 1
odoo-master-1=> COMMIT;
COMMIT

Rulează un server Odoo

Puteți porni o instanță de server Odoo dintr-un shell de container. Nu veți putea să o accesați din exterior cu un browser web, dar puteți, de exemplu:

  • Utilizaț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
    

    Sfat

    • Argumentul --without-demo=all împiedică încărcarea datelor demonstrative pentru toate modulele.

    • Argumentul --stop-after-init oprește imediat instanța serverului după finalizarea operației.

  • Actualizați un modul:

    odoo-bin -u sale --stop-after-init
    
  • Executați testele pentru un modul:

    odoo-bin -i sale --test-enable --log-level=test --stop-after-init
    

Vedeți și

Documentația CLI

Pentru a găsi calea addons utilizată de Odoo.sh pentru a rula serverul dvs., căutați „odoo: addons paths” în jurnale (~/logs/odoo.log).

2025-02-19 10:51:39,267 4 INFO ? odoo: Odoo version 18.0
2025-02-19 10:51:39,268 4 INFO ? odoo: Using configuration file at /home/odoo/.config/odoo/odoo.conf
2025-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']

Atenționare

Operațiunile pe care le efectuați pe o instanță de server Odoo nu sunt izolate; modificările vor fi reflectate în baza de date. Nu uitați să efectuați întotdeauna testele în bazele de date de testare (staging).

Depanarea în Odoo.sh

Notă

Depanarea unei build Odoo.sh nu diferă cu adevărat de depanarea altei aplicații Python. Prin urmare, scopul acestei secțiuni este de a acoperi particularitățile și limitările platformei Odoo.sh și presupune că știți deja cum să folosiți un depanator (debugger).

Puteți utiliza pdb, pudb sau ipdb pentru a depana codul pe Odoo.sh. Deoarece serverul rulează în afara unui shell, nu puteți lansa depanatorul direct din backend-ul Odoo, deoarece acesta necesită un shell pentru a funcționa.

pdb este instalat în mod implicit în fiecare container.

Sfat

Pentru a utiliza pudb sau ipdb, este necesar să le instalați fie:

  • permanent, adăugând pudb sau ipdb în fișierul requirements.txt al proiectului dvs., sau

  • temporar (doar în build-ul curent), executând comanda relevantă:

    pip install pudb --user
    
    pip install ipdb --user
    
  1. Pentru a declanșa depanatorul, adăugați acest lucru la codul pe care doriți să îl depanați:

    import sys
    if sys.__stdin__.isatty():
        import pdb; pdb.set_trace()
    

    Notă

    Condiția sys.__stdin__.isatty() este o soluție alternativă pentru a detecta dacă rulați Odoo dintr-un shell.

  2. Apoi, salvați fișierul și rulați shell-ul Odoo:

    odoo-bin shell
    
  3. Utilizați shell-ul Odoo pentru a declanșa codul pe care doriți să îl depanați.

    pdb rulând într-un shell Odoo.sh

Submodule

Git submodules vă permit să conectați repository-uri externe direct în proiectul dvs. fără a copia-lipi codul, simplificând implementarea prin clonarea dependențelor alături de codul dvs. principal. Mențineți un control precis al versiunilor alegând ramuri exacte și fixând anumite revizii de commit pentru a le actualiza ori de câte ori doriți.

On Odoo.sh, the platform automatically detects submodules and adds them to your addons path for database installation, provided you configure a deploy key in your project and repository settings when integrating private repositories.

Adăugarea unui submodule

Notă

Currently, it is not possible to add private repositories with Odoo.sh. You can nevertheless do so with Git.

  1. From the Branches view of your Odoo.sh project, choose the branch in which you want to add a submodule.

  2. In the upper right corner, click Submodule, then Run on Odoo.sh.

  3. In the dialog box, fill in the following:

    • Repository URL: the SSH URL of the repository

      Sfat

      On GitHub, click Clone, select SSH, and copy the URL.

    • Branch: the specific branch that should be used

    • Path: the folder in which the submodule should be added to in your branch

Sfat

When adding a repository that contains many modules, you may want to ignore some of them if any are installed automatically. To do so, prefix your submodule folder with a . (e.g. .folder). The platform will ignore this folder, and you can hand-pick the modules by creating symbolic links to them from another folder.

Acțiuni programate

On the Odoo.sh platform, scheduled actions are implemented slightly differently from a regular Odoo server and are run on a best-effort basis. This is because there might be multiple customers on the same server, and each customer is guaranteed a fair share of the server’s resources. Therefore, an exact running time for scheduled actions cannot be guaranteed.

Important

Do not expect any scheduled action to be run more often than every five minutes.

Deoarece timpul de execuție al acțiunilor programate este limitat, este recomandat să vă asigurați că acțiunile programate:

  • Lucrează cu loturi mici de înregistrări.

  • Confirmă (commit) lucrul după procesarea fiecărui lot, astfel încât, dacă sunt întrerupte de limita de timp, să nu fie nevoite să o ia de la capăt.

  • Sunt idempotente, adică nu trebuie să provoace efecte secundare dacă sunt pornite mai des decât se așteaptă.