Контейнери

Загальний огляд

Кожна збірка ізольована у власному контейнері (контейнер з простором імен Linux).

Основою є система Ubuntu, на якій встановлено всі необхідні залежності Odoo, а також поширені корисні пакети.

Якщо вашому проекту потрібні додаткові залежності Python або більш нові версії, ви можете визначити файл requirements.txt в кореневій папці ваших гілок зі списком цих залежностей. Платформа подбає про встановлення цих залежностей у ваших контейнерах. Документація специфікаторів вимог pip може допомогти вам написати файл requirements.txt. Щоб побачити конкретний приклад, перегляньте файл requirements.txt Odoo.

Файли requirements.txt підмодулів також враховуються. Платформа шукає файли requirements.txt у кожній папці, що містить модулі Odoo: не в самій папці модуля, а в їхній батьківській папці.

Структура каталогів

Оскільки контейнери базуються на Ubuntu, їхня структура каталогів відповідає стандарту ієрархії файлової системи Linux. Огляд дерева файлової системи Ubuntu пояснює основні каталоги.

Ось відповідні каталоги 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

У контейнерах встановлено Python 2.7 і 3.5. Однак:

  • Якщо ваш проект налаштовано на використання Odoo 10.0, сервер Odoo працює з Python 2.7.

  • Якщо ваш проект налаштовано на використання Odoo 11.0 або вище, сервер Odoo працює з Python 3.5.

Оболонка бази даних

Отримавши доступ до контейнера через оболонку, ви можете отримати доступ до бази даних за допомогою 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=>

Будьте обережні! Використовуйте транзакції (BEGIN…COMMIT/ROLLBACK) для кожної sql-інструкції, що призводить до змін (UPDATE, DELETE, ALTER, …), особливо для вашої виробничої бази даних.

Механізм транзакцій — це ваша страхувальна сітка на випадок помилки. Вам просто потрібно відкотити зміни, щоб повернути базу даних до попереднього стану.

Наприклад, може статися так, що ви забудете встановити умову WHERE.

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

У такому випадку ви можете відкотити небажані зміни, які ви щойно помилково зробили, і переписати інструкцію:

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

Однак не забудьте зафіксувати або відкотити транзакцію після її виконання. Відкриті транзакції можуть заблокувати записи у ваших таблицях, і ваша робоча база даних може чекати на їх звільнення. Це може призвести до безстрокового зависання сервера.

Крім того, коли це можливо, використовуйте тестові бази даних, щоб спочатку перевірити свої інструкції. Це дає вам додаткову страхувальну сітку.

Запуск сервера Odoo

Ви можете запустити екземпляр сервера Odoo з оболонки контейнера. Ви не зможете отримати до нього доступ із зовнішнього світу через браузер, але ви можете, наприклад:

  • використовувати оболонку 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'
  • встановити модуль,

$  odoo-bin -i sale --stop-after-init
  • оновити модуль,

$  odoo-bin -u sale --stop-after-init
  • запустити тести для модуля,

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

У наведених вище командах аргумент:

  • --stop-after-init негайно зупинить екземпляр сервера після завершення операцій, які ви запитали.

Більше опцій доступні та детально описані в документації CLI.

Ви можете знайти в логах (~/logs/odoo.log) шлях до доповнень, який використовується Odoo.sh для запуску вашого сервера. Шукайте «odoo: addons paths»:

2018-02-19 10:51:39,267 4 INFO ? odoo: Odoo version 19.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/19.0', '/home/odoo/src/user', '/home/odoo/src/enterprise', '/home/odoo/src/themes', '/home/odoo/src/odoo/addons', '/home/odoo/src/odoo/odoo/addons']

Будьте обережні, особливо з вашою виробничою базою даних. Операції, які ви виконуєте, запускаючи цей екземпляр сервера Odoo, не ізольовані: зміни будуть застосовані в базі даних. Завжди проводьте тести в тестових базах даних.

Налагодження в Odoo.sh

Налагодження збірки Odoo.sh не дуже відрізняється від іншого додатку Python. Ця стаття лише пояснює особливості та обмеження платформи Odoo.sh і передбачає, що ви вже знаєте, як використовувати налагоджувач.

Примітка

Якщо ви ще не знаєте, як налагоджувати додаток Python, в Інтернеті можна легко знайти кілька вступних курсів.

Ви можете використовувати pdb, pudb або ipdb для налагодження вашого коду на Odoo.sh. Оскільки сервер запускається поза оболонкою, ви не можете запустити налагоджувач безпосередньо з бекенду вашого екземпляра Odoo, оскільки налагоджувачу потрібна оболонка для роботи.

  • pdb встановлено за замовчуванням у кожному контейнері.

  • Якщо ви хочете використовувати pudb або ipdb, спочатку потрібно встановити їх.

    Для цього у вас є два варіанти:

    • тимчасово (лише в поточній збірці):

      $  pip install pudb --user
      

      або

      $  pip install ipdb --user
      
    • постійно: додайте pudb або ipdb до файлу requirements.txt вашого проекту.

Потім відредагуйте код там, де ви хочете запустити налагоджувач, і додайте це:

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

Умова sys.__stdin__.isatty() — це хак, який визначає, чи запускаєте ви Odoo з оболонки.

Збережіть файл, а потім запустіть оболонку Odoo:

$ odoo-bin shell

Нарешті, через оболонку Odoo ви можете запустити фрагмент коду/функцію/метод, який хочете налагодити.

Скріншот консолі, що показує ``pdb`` запущений в оболонці Odoo.sh.