Câu hỏi về Kỹ thuật Thường gặp¶
“Tác vụ đã lên lịch không diễn ra đúng vào thời điểm dự kiến”¶
Trên nền tảng Odoo.sh, chúng tôi không thể đảm bảo thời gian chạy chính xác của các tác vụ đã lên lịch.
Điều này là do có thể có nhiều khách hàng trên cùng một máy chủ và chúng tôi phải đảm bảo phân chia máy chủ một cách công bằng cho mỗi khách hàng. Do đó, các tác vụ đã lên lịch được triển khai hơi khác so với trên máy chủ Odoo thông thường và được chạy theo chính sách nỗ lực hết sức.
Cảnh báo
Xin đừng mong đợi bất kỳ tác vụ đã lên lịch nào được thực hiện thường xuyên hơn 5 phút một lần.
Có “giải pháp tối ưu nhất” về các tác vụ đã lên lịch không?¶
Odoo.sh always limits the execution time of scheduled actions (*aka* crons). Therefore, you must keep this fact in mind when developing your own crons.
Chúng tôi khuyên rằng:
Các tác vụ đã lên lịch của bạn nên áp dụng cho các lô bản ghi nhỏ.
Các tác vụ đã lên lịch của bạn sẽ hoạt động sau khi xử lý từng đợt; như vậy, nếu chúng bị gián đoạn do giới hạn thời gian, thì bạn sẽ không cần phải bắt đầu lại.
Your scheduled actions should be idempotent: they must not cause side-effects if they are started more often than expected.
Làm thế nào tôi có thể tự động hóa các nhiệm vụ khi địa chỉ IP thay đổi?¶
Odoo.sh thông báo cho quản trị viên dự án về những thay đổi địa chỉ IP. Ngoài ra, khi địa chỉ IP của phiên bản production thay đổi, yêu cầu HTTP GET
sẽ được gửi đến đường dẫn /_odoo.sh/ip-change
với địa chỉ IP mới được bao gồm dưới dạng tham số chuỗi truy vấn (new
), cùng với địa chỉ IP trước đó dưới dạng tham số bổ sung (old
).
Cơ chế này cho phép áp dụng các tác vụ tùy chỉnh để phản hồi lại sự thay đổi địa chỉ IP (VD: gửi email, liên hệ với API tường lửa, cấu hình đối tượng cơ sở dữ liệu,…)
Vì lý do bảo mật, tuyến /_odoo.sh/ip-change
chỉ có thể được chính nền tảng truy cập nội bộ và sẽ trả về phản hồi 403
nếu được truy cập thông qua bất kỳ phương tiện nào khác.
Sau đây là một ví dụ triển khai giả lập:
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'