Розширені теми

У цьому розділі розглядаються розширені можливості Odoo.sh, що стосуються контейнерів, підмодулів Git та запланованих дій.

Контейнери

Кожна збірка ізольована у власному контейнері (контейнері на основі просторів імен Linux). В основі лежить система на базі Ubuntu, у якій встановлено всі необхідні для Odoo залежності, а також поширені корисні пакети.

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

Перегляньте також

Примітка

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

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

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

Каталоги, що стосуються Odoo.sh, такі:

.
├── 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

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

Під час доступу до контейнера за допомогою оболонки ви можете отримати доступ до бази даних за допомогою команди psql.

[email protected]:~$ psql
psql (16.9)
Type "help" for help.

odoo-master-1=>

Попередження

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

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

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

Example

Ви забули вказати умову WHERE. У такому випадку можна виконати відкат, щоб скасувати небажані зміни:

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

Потім перепишіть оператор і збережіть зміни:

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

Запустіть сервер Odoo

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

  • Скористайтеся оболонкою Odoo:

    odoo-bin shell
    >>> partner = env['res.partner'].search([('email', '=', '[email protected]')], limit=1)
    >>> partner.name
    'ASUSTeK'
    >>> partner.name = 'Odoo'
    >>> env['res.partner'].search([('email', '=', '[email protected]')], limit=1).name
    'Odoo'
    
  • Встановити модуль:

    odoo-bin -i sale --without-demo=all --stop-after-init
    

    Порада

    • Аргумент --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
    

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

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']

Попередження

Операції, які ви виконуєте на екземплярі сервера Odoo, не є ізольованими; зміни будуть відображені в базі даних. Не забувайте завжди проводити тестування у своїх тестових базах даних.

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

Примітка

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

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

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

Порада

Щоб скористатися командами pudb або ipdb, необхідно встановити їх одним із таких способів:

  • назавжди, додавши pudb або ipdb до файлу requirements.txt вашого проєкту, або

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

    pip install pudb --user
    
    pip install ipdb --user
    
  1. Щоб запустити відладчик, додайте це до коду, який потрібно відладити:

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

    Примітка

    Умова sys.__stdin__.isatty() є обхідним рішенням для визначення того, чи запущено Odoo з командного рядка.

  2. Далі збережіть файл і запустіть оболонку Odoo:

    odoo-bin shell
    
  3. Скористайтеся оболонкою Odoo, щоб запустити код, який потрібно налагодити.

    pdb, що працює в оболонці Odoo.sh

Підмодулі

Субмодулі Git дозволяють безпосередньо підключати зовнішні репозиторії до вашого проєкту без копіювання та вставлення коду, спрощуючи розгортання завдяки клонуванню залежностей разом із основною кодовою базою. Ви забезпечуєте точний контроль версій, обираючи конкретні гілки та фіксуючи певні ревізії комітів для оновлення в будь-який зручний для вас час.

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

Додавання підмодуля

Примітка

Наразі в Odoo.sh неможливо додавати приватні репозиторії. Проте це можна зробити за допомогою Git.

  1. У вікні Гілки вашого проєкту Odoo.sh виберіть гілку, до якої ви хочете додати підмодуль.

  2. У правому верхньому куті натисніть Підмодуль, а потім Запустити на Odoo.sh.

  3. У діалоговому вікні вкажіть наступне:

    • URL-адреса репозиторію: URL-адреса репозиторію для SSH

      Порада

      На GitHub натисніть Clone, виберіть SSH і скопіюйте URL-адресу.

    • Гілка: конкретна гілка, яку слід використовувати

    • Path: папка у вашій гілці, до якої слід додати підмодуль

Порада

Під час додавання репозиторію, що містить багато модулів, ви можете захотіти проігнорувати деякі з них, якщо якісь із них встановлюються автоматично. Для цього додайте перед назвою папки підмодуля префікс . (наприклад, .folder). Платформа проігнорує цю папку, і ви зможете вручну вибрати модулі, створивши символічні посилання на них з іншої папки.

Заплановані дії

На платформі Odoo.sh заплановані дії реалізовано дещо інакше, ніж на звичайному сервері Odoo, і вони виконуються за принципом «за можливості». Це пов’язано з тим, що на одному сервері може бути кілька клієнтів, і кожному з них гарантується справедлива частка ресурсів сервера. Тому точний час виконання запланованих дій гарантувати неможливо.

Важливо

Не слід очікувати, що будь-яка запланована операція виконуватиметься частіше, ніж раз на п’ять хвилин.

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

  • Працюйте з невеликими партіями записів.

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

  • Є ідемпотентними, тобто не повинні спричиняти побічних ефектів, якщо їх запускати частіше, ніж передбачалося.