Kontainer

Overview

Setiap build di-isolasi di dalam kontainer-nya sendiri (kontainer namespace Linux)

Basisnya adalah sistem Ubuntu, di mana semua ketergantungan Odoo yang diperlukan, sekaligus semua paket umum yang berguna, diinstal.

If your project requires additional Python dependencies, or more recent releases, you can define a requirements.txt file in the root of your branches listing them. The platform will take care to install these dependencies in your containers. The pip requirements specifiers documentation can help you write a requirements.txt file. To have a concrete example, check out the requirements.txt file of Odoo.

File-file requirements.txt dari submodul juga dipertimbangkan. Platform mencari file requirements.txt di setiap folder yang memiliki modul Odoo: Tidak di folder modul tersebut sendiri, tapi di folder induknya.

Struktur direktori

Karena kontainer berdasarkan Ubuntu, struktur direktori mereka mengikuti linux Filesystem Hierarchy Standard. Ubuntu's filesystem tree overview menjelaskan direktori-direktori utama.

Berikut adalah Odoo.sh perttinent directories:

.
├── home
│    └── odoo
│         ├── src
│         │    ├── odoo                Odoo Community source code
│         │    │    └── odoo-bin       Odoo server executable
│         │    ├── enterprise          Odoo Enterprise source code
│         │    ├── themes              Odoo Themes source code
│         │    └── user                Your repository branch source code
│         ├── data
│         │    ├── filestore           database attachments, as well as the files of binary fields
│         │    └── sessions            visitors and users sessions
│         └── logs
│              ├── install.log         Database installation logs
│              ├── odoo.log            Running server logs
│              ├── update.log          Database updates logs
│              └── pip.log             Python packages installation logs
└── usr
     ├── lib
     │    ├── python2.7
     │         └── dist-packages       Python 2.7 standard libraries
     │    ├── python3
     │         └── dist-packages       Python 3 standard libraries
     │    └── python3.5
     │         └── dist-packages       Python 3.5 standard libraries
     ├── local
     │    └── lib
     │         ├── python2.7
     │         │    └── dist-packages  Python 2.7 third-party libraries
     │         └── python3.5
     │              └── dist-packages  Python 3.5 third-party libraries
     └── usr
          └── bin
               ├── python2.7           Python 2.7 executable
               └── python3.5           Python 3.5 executable

Masing-masing Python 2.7 dan 3.5 diinstal di kontainer. Namun

  • Bila project Anda dikonfigurasi untuk menggunakan Odoo 10.0, Odoo server berjalan dengan Python 2.7

  • Bila project Anda dikonfigurasi untuk menggunakan Odoo 11.0, server Odoo berjalan dengan Python 3.5.

Database shell

Selagi mengakses kontainer dengan shell, Anda dapat mengakses database menggunakan psql.

odoo@odoo-addons-master-1.odoo.sh:~$ psql
psql (9.5.2, server 9.5.11)
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
Type "help" for help.

odoo-addons-master-1=>

Hati-hati ! Gunakan transaksi (BEGIN...COMMIT/ROLLBACK) untuk setiap sql statement yang berujung ke perubahan (UPDATE, DELETE, ALTER, ...), terutama untuk production database Anda.

Mekanisme transaksi adalah jaringan pengaman apabila terjadi kesalahan. Anda cukup rollback perubahan Anda untuk mengembalikkan database Anda menjadi status sebelumnya.

Contohnya, bisa terjadi kasus di mana Anda lupa menetapkan kondisi WHERE Anda.

odoo-addons-master-1=> BEGIN;
BEGIN
odoo-addons-master-1=> UPDATE res_users SET password = '***';
UPDATE 457
odoo-addons-master-1=> ROLLBACK;
ROLLBACK

Bila terjadi hal serupa, Anda dapat rollback untuk mengembalikan perubahan yang tidak Anda inginkan tersebut, dan menuliskan ulang statement:

odoo-addons-master-1=> BEGIN;
BEGIN
odoo-addons-master-1=> UPDATE res_users SET password = '***' WHERE id = 1;
UPDATE 1
odoo-addons-master-1=> COMMIT;
COMMIT

Namun, jangan lupa untuk commit atau rollback transaksi Anda setelah melakukannya. Transaksi terbuka mungkin mengunci record di tabel-tabel Anda database Anda yang berjalan mungkin menunggu sampai mereka dirilis. Ini dapat mengakibatkan server untuk hang tanpa akhir.

Sebagai tambahan, bila mungkin, gunakan database staging Anda untuk menguji statement Anda terlebih dahulu. Ini akan memberikan Anda jaring pengaman tambahan.

Jalankan server Odoo

Anda dapat memulai instance server Odoo dari kontainer shell. Anda tidak akan dapat mengaksesnya dari dunia luar dengan browser, tapi Anda dapat mengakses untuk instance:

  • gunakan Odoo shell,

$  odoo-bin shell
>>> partner = env['res.partner'].search([('email', '=', 'asusteK@yourcompany.example.com')], limit=1)
>>> partner.name
'ASUSTeK'
>>> partner.name = 'Odoo'
>>> env['res.partner'].search([('email', '=', 'asusteK@yourcompany.example.com')], limit=1).name
'Odoo'
  • instal modul,

$  odoo-bin -i sale --without-demo=all --stop-after-init
  • update modul,

$  odoo-bin -u sale --stop-after-init
  • jalankan tes untuk modul,

$  odoo-bin -i sale --test-enable --log-level=test --stop-after-init

Di command-command di atas, argument-nya:

  • --without-demo=all mencegah data demo untuk dimuat untuk semua modul

  • --stop-after-init akan langsung mematikan instance server setelah menyelesaikan operasi yang Anda minta.

Lebih banyak opsi tersedia dengan rinci di dokumentasi CLI.

Di log (~/logs/odoo.log) Anda dapat menemukan addon path yang digunakan oleh Odoo.sh untuk menjalankan server Anda. Cari "odoo: addons paths":

2018-02-19 10:51:39,267 4 INFO ? odoo: Odoo version 18.0
2018-02-19 10:51:39,268 4 INFO ? odoo: Using configuration file at /home/odoo/.config/odoo/odoo.conf
2018-02-19 10:51:39,268 4 INFO ? odoo: addons paths: ['/home/odoo/data/addons/18.0', '/home/odoo/src/user', '/home/odoo/src/enterprise', '/home/odoo/src/themes', '/home/odoo/src/odoo/addons', '/home/odoo/src/odoo/odoo/addons']

Be careful, terutama dengan production database Anda. Operasi ang Anda lakukan di instance server Odoo ini tidak diisolasi: Perubahan apapun akan dilakukan di database. Selalu lakukan testing di database staging Anda.

Debugging di Odoo.sh

Debugging build Odoo.sh tidak terlalu berbeda dari app Python apapun. Artikel ini hanya menjelaskan spesifikasi dan limitasi dari platform Odoo.sh, dan mengasumsikan Anda sudah mengetahui cara menggunakan debugger.

Catatan

Bila Anda belum tahu cara untuk debug aplikasi Python, terdapat beberapa kursus pengantar yang dapat gampang ditemukan di internet.

Anda dapat menggunakan pdb, pudb atau ipdb untuk debug kode Anda di Odoo.sh. Karena server dijalankan di luar shell, Anda tidak dapat menjalankan debugger langsung dari instance backend Odoo Anda karena debugger membutuhkan shell untuk beroperasi.

  • pdb secara default diinstal di setiap kontainer.

  • Bila Anda ingin menggunakan pudb atau ipdb Anda harus menginstalnya sebelumnya.

    Untuk melakukan itu, Anda memiliki dua opsi:

    • sementara (hanya di build saat ini):

      $  pip install pudb --user
      

      atau

      $  pip install ipdb --user
      
    • permanen: tambahkan pudb atau ipdb ke file project requirements.txt Anda.

Lalu edit code di mana Anda ingin memicu debugger dan tambahkan ini:

import sys
if sys.__stdin__.isatty():
    import pdb; pdb.set_trace()

Condition sys.__stdin__.isatty() adalah hack yang mendeteksi bila Anda menjalankan Odoo dari shell.

Simpan file dan lalu jalankan Odoo Shell:

$ odoo-bin shell

Akhirnya, melalui Odoo Shell, Anda dapat memicu potongan code/fungsi/metode yang Anda ingin debug.

Console screenshot menunjukkan ``pdb`` berjalan di Odoo.sh shell.