Розширені теми¶
У цьому розділі розглядаються розширені можливості Odoo.sh, що стосуються контейнерів, підмодулів Git та запланованих дій.
Контейнери¶
Кожна збірка ізольована у власному контейнері (контейнері на основі просторів імен Linux). В основі лежить система на базі Ubuntu, у якій встановлено всі необхідні для Odoo залежності, а також поширені корисні пакети.
Якщо ваш проєкт потребує додаткових залежностей Python або новіших версій, ви можете створити файл requirements.txt у кореневій директорії ваших гілок і перелічити їх у ньому. Платформа забезпечить встановлення цих залежностей у ваших контейнерах.
Перегляньте також
Для конкретного прикладу перегляньте файл requirements.txt спільноти Odoo.
Примітка
Також враховуються файли 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
Щоб запустити відладчик, додайте це до коду, який потрібно відладити:
import sys if sys.__stdin__.isatty(): import pdb; pdb.set_trace()
Примітка
Умова
sys.__stdin__.isatty()є обхідним рішенням для визначення того, чи запущено Odoo з командного рядка.Далі збережіть файл і запустіть оболонку Odoo:
odoo-bin shell
Скористайтеся оболонкою Odoo, щоб запустити код, який потрібно налагодити.
Підмодулі¶
Субмодулі Git дозволяють безпосередньо підключати зовнішні репозиторії до вашого проєкту без копіювання та вставлення коду, спрощуючи розгортання завдяки клонуванню залежностей разом із основною кодовою базою. Ви забезпечуєте точний контроль версій, обираючи конкретні гілки та фіксуючи певні ревізії комітів для оновлення в будь-який зручний для вас час.
На Odoo.sh платформа автоматично виявляє субмодулі та додає їх до шляху до додатків для встановлення бази даних, за умови, що ви налаштували ключ розгортання в налаштуваннях вашого проєкту та репозиторію під час інтеграції приватних репозиторіїв.
Додавання підмодуля¶
Примітка
Наразі в Odoo.sh неможливо додавати приватні репозиторії. Проте це можна зробити за допомогою Git.
У вікні Гілки вашого проєкту Odoo.sh виберіть гілку, до якої ви хочете додати підмодуль.
У правому верхньому куті натисніть Підмодуль, а потім Запустити на Odoo.sh.
У діалоговому вікні вкажіть наступне:
URL-адреса репозиторію: URL-адреса репозиторію для SSH
Порада
На GitHub натисніть Clone, виберіть SSH і скопіюйте URL-адресу.
Гілка: конкретна гілка, яку слід використовувати
Path: папка у вашій гілці, до якої слід додати підмодуль
У терміналі в папці, де клоновано ваше сховище Git, перевірте гілку, до якої ви хочете додати підмодуль:
git checkout <branch>
Додати підмодуль:
git submodule add -b <branch> <[email protected]>:<username/repository.git> <path>
<[email protected]>:<username/repository.git>: URL-адреса репозиторію у форматі SSH, який ви хочете додати як підмодуль
<branch>: гілка, яку ви хочете використовувати у зазначеному вище репозиторії
<path>: папка, до якої ви хочете додати цей підмодуль
Збережіть зміни та відправте їх:
git commit -a && git push -u <remote> <branch><remote>: репозиторій, у який ви хочете відправити свої зміни. У стандартній конфігурації Git це origin.
<branch>: гілка, на яку ви хочете відправити свої зміни. Найімовірніше, це та гілка, яку ви вибрали на першому кроці.
Порада
Під час додавання репозиторію, що містить багато модулів, ви можете захотіти проігнорувати деякі з них, якщо якісь із них встановлюються автоматично. Для цього додайте перед назвою папки підмодуля префікс . (наприклад, .folder). Платформа проігнорує цю папку, і ви зможете вручну вибрати модулі, створивши символічні посилання на них з іншої папки.
Заплановані дії¶
На платформі Odoo.sh заплановані дії реалізовано дещо інакше, ніж на звичайному сервері Odoo, і вони виконуються за принципом «за можливості». Це пов’язано з тим, що на одному сервері може бути кілька клієнтів, і кожному з них гарантується справедлива частка ресурсів сервера. Тому точний час виконання запланованих дій гарантувати неможливо.
Важливо
Не слід очікувати, що будь-яка запланована операція виконуватиметься частіше, ніж раз на п’ять хвилин.
Оскільки час виконання запланованих дій обмежений, рекомендується переконатися, що ваші заплановані дії:
Працюйте з невеликими партіями записів.
Зберігайте результати їхньої роботи після обробки кожної партії, щоб у разі переривання через закінчення ліміту часу їм не довелося починати все спочатку.
Є ідемпотентними, тобто не повинні спричиняти побічних ефектів, якщо їх запускати частіше, ніж передбачалося.