Контейнери

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

Кожна збірка ізольована у власному контейнері (контейнер простору імен 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 --without-demo=all --stop-after-init
  • оновити модуль,

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

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

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

  • --without-demo=all запобігає завантаженню демонстраційних даних для всіх модулів

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

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

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

2018-02-19 10:51:39,267 4 INFO ? odoo: Odoo version 17.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/17.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 Shell:

$ odoo-bin shell

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

Знімок екрана консолі, на якому показано ``pdb``, що працює в оболонці Odoo.sh.