常见的技术问题

“计划的操作不会在预期的确切时间运行`

在 Odoo.sh 平台上,我们无法保证计划操作的确切运行时间。

这是因为同一台服务器上可能有多个客户,我们必须保证每个客户都有公平的服务器份额。因此,计划操作的实现方式与在常规 Odoo 服务器上略有不同,并且按照 尽力而为 策略运行。

警告

不要期望任何计划的操作运行频率高于每 5 分钟一次。

是否有关于计划操作的“最佳实践”?

**Odoo.sh 总是限制计划操作(aka crons)的执行时间 **此,在开发自己的克隆时,您必须牢记这一事实。

我们建议:

  • 计划的操作应该适用于小批量记录。

  • 您计划的行动应该在处理每个批次后提交他们的工作;这样,如果他们被时间限制打断,就没有必要重新开始。

  • 您计划的操作应该是“幂等<https://stackoverflow.com/a/1077421/3332416>”_:如果它们开始的频率高于预期,则它们不得引起副作用。

如何在 IP 地址发生变化时自动执行任务?

**此外,当生产实例的 IP 地址发生变化时,会向路径 /_odoo.sh/ip-change)发出 HTTP GET 请求,并将新的 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'