Pertanyaan Teknis Umum¶
"Action yang dijadwalkan tidak berjalan tepat pada waktu yang diharapkan"¶
Pada platform Odoo.sh, kami tidak dapat menjamin waktu pelaksanaan yang tepat untuk action yang dijadwalkan.
Ini oleh karena fakta mungkin terdapat lebih dari satu pelanggan pada server yang sama, dan kami harus menjamin kegunaan server yang adil untuk setiap pelanggan. Action yang dijadwalkan oleh karena itu diimplementasikan sedikit lebih berbeda dari server Odoo reguler, dan dijalankan dengan kebijakan usaha terbaik
Peringatan
Jangan mengharapkan action yang dijadwalkan untuk dilaksanakan lebih sering dari setiap 5 menit.
Apakah ada "praktek terbaik" mengenai action yang dijadwalkan?¶
Odoo.sh selalu membatasi waktu pelaksanaan action yang dijadwalkan (*aka* crons). Oleh karena itu, Anda harus mengingat fakta ini saat membuat cron Anda sendiri.
Kami menyarankan Anda:
Action Anda yang dijadwalkan harusnya bekerja pada batch record yang kecil.
Action Anda yang dijadwalkan harus commit progress mereka setelah memproses setiap batch; dengan begini, bila mereka dihentikan oleh batasan waktu, mereka tidak harus memulai dari nol.
Jadwal Anda yang dijadwalkan harus idempotent: mereka tidak boleh menghasilkan efek sampingan bila mereka dilaksanakan lebih sering dari yang diharapkan.
How can I automate tasks when an IP address change occurs?¶
Odoo.sh notifies project administrators of IP address changes.
Additionally, when the IP address of a production instance changes, an HTTP GET
request is made
to the path /_odoo.sh/ip-change
with the new IP address included as a query string parameter
(new
), along with the previous IP address as an additional parameter (old
).
This mechanism allows custom actions to be applied in response to the IP address change (e.g., sending an email, contacting a firewall API, configuring database objects, etc.)
For security reasons, the /_odoo.sh/ip-change
route is accessible only internally by the platform
itself and returns a 403
response if accessed through any other means.
Here is a pseudo-implementation example:
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'