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
For a concrete example, check out the Odoo Community requirements.txt file.
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-initSfat
Argumentul
--without-demo=allîmpiedică încărcarea datelor demonstrative pentru toate modulele.Argumentul
--stop-after-initopreș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
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
pudbsauipdbîn fișierulrequirements.txtal proiectului dvs., sautemporar (doar în build-ul curent), executând comanda relevantă:
pip install pudb --user
pip install ipdb --user
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.Apoi, salvați fișierul și rulați shell-ul Odoo:
odoo-bin shell
Utilizați shell-ul Odoo pentru a declanșa codul pe care doriți să îl depanați.
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.
From the Branches view of your Odoo.sh project, choose the branch in which you want to add a submodule.
In the upper right corner, click Submodule, then Run on Odoo.sh.
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
Într-un terminal, în folderul unde este clonat depozitul Git, verificați ramura în care doriți să adăugați un submodule:
git checkout <branch>
Add the submodule:
git submodule add -b <branch> <git@yourprovider.com>:<username/repository.git> <path>
<git@yourprovider.com>:<username/repository.git>: the SSH URL of the repository you want to add as a submodule
<branch>: the branch you want to use in the above repository
<path>: the folder in which you want to add this submodule
Commit and push the changes:
git commit -a && git push -u <remote> <branch><remote>: the repository on which you want to push your changes. On a standard Git setup, this is origin.
<branch>: the branch on which you want to push your changes. Most likely, the branch you checked out in the first step.
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ă.