Часті технічні запитання¶
«Заплановані дії виконуються не в той час, коли вони очікувалися»¶
На платформі Odoo.sh ми не можемо гарантувати точний час виконання запланованих дій.
Це пов’язано з тим, що на одному сервері може бути кілька клієнтів, і ми повинні гарантувати справедливу частку сервера для кожного клієнта. Тому заплановані дії реалізуються дещо інакше, ніж на звичайному сервері Odoo, і виконуються відповідно до політики найкращих зусиль.
Попередження
Не очікуйте, що будь-яка запланована дія буде виконуватися частіше ніж кожні 5 хвилин.
Чи існують «найкращі практики» щодо запланованих дій?¶
Odoo.sh завжди обмежує час виконання запланованих дій (*таких як* хрони). Тому ви повинні мати на увазі цей факт, розробляючи власні хрони.
Радимо:
Ваші заплановані дії мають працювати з невеликими партіями записів.
Ваші заплановані дії мають виконувати свою роботу після обробки кожного пакета; таким чином, якщо вони перериваються через ліміт часу, не потрібно починати спочатку.
Ваші заплановані дії мають бути ідемпотентними: вони не повинні викликати побічних ефектів, якщо їх запускати частіше, ніж очікувалося.
Як я можу автоматизувати завдання, коли відбувається зміна IP-адреси?¶
Odoo.sh сповіщає адміністраторів проекту про зміни IP-адреси. Крім того, коли IP-адреса робочого екземпляра змінюється, HTTP-запит GET надсилається на шлях /_odoo.sh/ip-change
з нова IP-адреса включена як параметр рядка запиту (new
), разом із попередньою IP-адресою як додатковий параметр (old
).
Цей механізм дозволяє застосовувати спеціальні дії у відповідь на зміну IP-адреси (наприклад, надсилання електронного листа, звернення до API брандмауера, налаштування об’єктів бази даних тощо)
З міркувань безпеки маршрут /_odoo.sh/ip-change
доступний лише всередині самої платформи та повертає відповідь 403
, якщо доступ до нього здійснюється будь-яким іншим способом.
Ось приклад псевдореалізації:
class IPChangeController(http.Controller):
@http.route('/_odoo.sh/ip-change', auth='public')
def ip_change(self, old=None, new=None):
_logger.info("IP address changed from %s to %s", old, new)
# Then perform whatever action required for your use case, e.g., update an
# ir.config_parameter, send an email, contact an external firewall service's API, ...
return 'ok'