常见技术问题¶
“计划的操作不会在预期的确切时间运行”¶
在 Odoo.sh 平台上,我们无法保证计划操作的精确运行时间。
这可能是由于同一台服务器上可能存在多个客户,我们必须确保每个客户都能公平地使用服务器资源。因此,计划任务的实现方式与普通 Odoo 服务器略有不同,并且是按照 尽力而为 的策略来执行的。
警告
不要期望任何计划动作的执行频率超过每5分钟一次。
是否有关于计划操作的“最佳实践”?¶
Odoo.sh 始终限制计划操作(*即* 定时任务)的执行时间。 因此,在开发自己的定时任务时,您必须牢记这一点。
我们建议:
您计划执行的操作应针对小批量的记录进行。
您安排的操作应在处理每个批次后提交其工作;这样,如果它们因时间限制而被中断,就不需要重新开始。
Your scheduled actions should be idempotent: they must not cause side-effects if they are started more often than expected.
当IP地址发生更改时,如何自动化任务?¶
Odoo.sh 会通知项目管理员 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'