Install modul python debugpy di dalam container. Bisa dengan cara:
- rebuild image: dengan nambah entry RUN pip3 install debugpy
- execute di dalam contaner: pip3 install debugpy dan commit image
Khusus untuk debugging, kita perlu edit file executable odoo, misalnya di /usr/bin/odoo
#!/usr/bin/python3
# set server timezone in UTC before time module imported
__import__('os').environ['TZ'] = 'UTC'
import odoo
import debugpy
debugpy.wait_for_client()
if __name__ == "__main__":
odoo.cli.main()
Tambahkan:
- import debugpy
- debugpy.wait_for_client() supaya odoo menunggu client debuging VS Code connect dulu
Amankan image yang sudah di-setup menjadi image khusus debugging, lalu nanti edit docker-compose.yml agar memanggil image debugging ini.
Misalnya:
docker commit xxyyzzzaaa akhdaniel2/odoo:13.0-debug
dimana xxyyzzzaaa= yang didapat dari command docker ps
Setelah debugging selesai, jangan lupa balikkan lagi ke image yang non debugging supaya odoo jalan normal tanpa nunggu debugger connect.
Tambah:
- command untuk menjalankan modul python debugpy yang akan menjalankan /usr/bin/odoo
- membuka port debugging ke host misalnya 8888
version: '2'
services:
web:
image: odoo:13.0
ports:
- "8069:8069"
- "8888:8888"
environment:
- HOST=db
- USER=odoo
- PASSWORD=odoo
volumes:
- ./config:/etc/odoo:delegated
- ./addons:/mnt/extra-addons:delegated
logging:
options:
max-size: "10m"
max-file: "4"
command: /usr/bin/python3 -m debugpy --listen 0.0.0.0:8888 /usr/bin/odoo --db_user=odoo --db_host=db --db_password=odoo
Note: jika hosting di AWS jangan lupa buka port inbound 8888 ke public agar bisa diakses oleh VS code di local computer.
Tambahkan configurations di launch.json
"configurations": [
{
"name": "Python: Remote Attach",
"type": "python",
"request": "attach",
"connect": {
"host": "hostname.vitraining.com",
"port": 8888 },
"pathMappings": [{
"localRoot": "${workspaceFolder}/addons",
"remoteRoot": "/mnt/extra-addons",
}]
}
]
Lihat bagian connect:
- host = nama host atau IP docker odoo server
- port = port debugging misalnya 8888.
Bagian pathMappings:
- localRoot = folder tempat source code addons yg akan di debug di local computer, relative terhadap workspaceFolder, yaitu working folder kita di VS Code
- remoteRoot = folder tempat source code addon di server, biasanya start dari /mnt/extra-addons atau folder manapun yang menjadi root folder addon yang akan didebug
Setelah import debugpy di odoo bin, maka modul ini berlaku global di semua addon dan source code odoo. Untuk menghentikan jalannya program dan melakukan step by step debugging, tambahkan baris breakpoint() pada source code yang akan di debug.
Misalnya di addon stock, file stock_picking.py kita mau telusuri proses action_confirm()
@api.multi
def action_confirm(self):
breakpoint()
# call `_action_confirm` on every draft move
self.mapped('move_lines')\
.filtered(lambda move: move.state == 'draft')\
._action_confirm()
...
...
Ketika odoo sampai pada proses action_confirm maka VS code akan berhenti di situ dan kita bisa telusuri isi semua variable yang aktif di dalam method tersebut.
Happy debugging!