Advanced topics

This section covers advanced features of Odoo.sh related to containers, Git submodules, and scheduled actions.

Kontainer

Each build is isolated in its own container (Linux namespace container). The base is an Ubuntu-based system on which all of Odoo's required dependencies, as well as common, useful packages, are installed.

If your project requires additional Python dependencies or more recent releases, you can define a requirements.txt file at the root of your branches that lists them. The platform will ensure these dependencies are installed in your containers.

Lihat juga

Catatan

The requirements.txt files of submodules are also taken into account. The platform looks for such files in the parent folder of each folder containing an Odoo module.

Struktur direktori

As the containers are Ubuntu-based, their directory structure follows the Filesystem Hierarchy Standard.

The directories relevant to Odoo.sh are the following:

.
├── home
│    └── odoo
│         ├── backup.daily
│         ├── 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
│         └── 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
└── usr
     ├── lib
     │    └── pythonX.XX
     │         └── dist-packages       Python X.XX standard libraries
     ├── local
     │    └── lib
     │         └── pythonX.XX
     │              └── dist-packages  Python X.XX third-party libraries
     └── usr
          └── bin
               └── pythonX.X           Python X.XX executable

Database shell

While accessing a container with the shell, you can access the database using the psql command.

odoo@odoo-master-1.odoo.sh:~$ psql
psql (16.9)
Type "help" for help.

odoo-master-1=>

Peringatan

Always use transactions (e.g., BEGIN (...) COMMIT / ROLLBACK) when an SQL statement leads to changes (e.g., UPDATE, DELETE, ALTER, etc.) , especially for your production database. The transaction mechanism is your safety net in case of a mistake. You simply have to rollback your changes to revert your database to its previous state.

Do not forget to commit or roll back transactions. Open transactions may lock records in your tables, and a running database may wait for them to be released, causing a server to hang indefinitely.

In addition, use your staging databases to test your statements first. It gives you an extra safety net.

Example

You forgot to set your WHERE condition. In such a case, you can rollback to revert the unwanted change:

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

Then, rewrite the statement and commit the change:

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

Jalankan server Odoo

You can start an Odoo server instance from a container shell. You won't be able to access it from the outside world with a web browser, but you can, for example:

  • 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
    

    Tip

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

    • Argumen --stop-after-init langsung menghentikan instance server setelah operasi selesai.

  • Perbarui modul:

    odoo-bin -u sale --stop-after-init
    
  • Jalankan pengujian untuk modul:

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

Lihat juga

Dokumentasi CLI

Untuk menemukan jalur addons yang digunakan Odoo.sh guna menjalankan server Anda, cari "odoo: addons paths" dalam log (~/logs/odoo.log).

2025-02-19 10:51:39,267 4 INFO ? odoo: Odoo version 18.0
2025-02-19 10:51:39,268 4 INFO ? odoo: Using configuration file at /home/odoo/.config/odoo/odoo.conf
2025-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']

Peringatan

Operasi yang Anda lakukan pada instance server Odoo tidak terisolasi; perubahan akan tercermin dalam database. Selalu ingat untuk melakukan pengujian di database staging Anda.

Debugging di Odoo.sh

Catatan

Melakukan debug pada build Odoo.sh tidak jauh berbeda dari debugging aplikasi Python lainnya. Oleh karena itu, tujuan bagian ini adalah untuk membahas kekhususan dan batasan platform Odoo.sh, dengan asumsi Anda sudah mengetahui cara menggunakan debugger.

Anda dapat menggunakan pdb, pudb, atau ipdb untuk melakukan debug kode pada Odoo.sh. Karena server berjalan di luar shell, Anda tidak dapat menjalankan debugger langsung dari backend Odoo, karena debugger memerlukan shell untuk beroperasi.

pdb secara default diinstal di setiap kontainer.

Tip

Untuk menggunakan pudb atau ipdb, Anda perlu menginstalnya dengan salah satu cara berikut:

  • secara permanen dengan menambahkan pudb atau ipdb ke file requirements.txt proyek Anda, atau

  • secara sementara (hanya pada build saat ini) dengan menjalankan perintah yang sesuai:

    pip install pudb --user
    
    pip install ipdb --user
    
  1. Untuk memicu debugger, tambahkan kode berikut ke kode yang ingin Anda debug:

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

    Catatan

    Kondisi sys.__stdin__.isatty() adalah solusi untuk mendeteksi apakah Anda menjalankan Odoo dari shell.

  2. Selanjutnya, simpan file tersebut dan jalankan Odoo shell:

    odoo-bin shell
    
  3. Gunakan Odoo shell untuk memicu kode yang ingin Anda debug.

    pdb berjalan di dalam shell Odoo.sh

Submodul

Git submodules memungkinkan Anda menghubungkan repositori eksternal langsung ke proyek Anda tanpa perlu menyalin-tempel kode, sehingga menyederhanakan penerapan dengan mengkloning dependensi bersama basis kode utama Anda. Anda dapat mempertahankan kontrol versi yang presisi dengan memilih cabang tertentu dan mengunci revisi commit tertentu untuk diperbarui kapan pun Anda mau.

Di Odoo.sh, platform secara otomatis mendeteksi submodule dan menambahkannya ke addons path Anda untuk instalasi database, asalkan Anda mengonfigurasi deploy key di pengaturan project dan repository Anda saat mengintegrasikan repository privat.

Menambahkan submodul

Catatan

Saat ini, belum memungkinkan untuk menambahkan repository privat dengan Odoo.sh. Namun, Anda tetap bisa melakukannya dengan Git.

  1. Dari tampilan Branch di project Odoo.sh Anda, pilih branch tempat Anda ingin menambahkan submodule.

  2. Di pojok kanan atas, klik Submodule, lalu Run on Odoo.sh.

  3. Di kotak dialog, isi bagian berikut:

    • Repository URL: URL SSH dari repository

      Tip

      Di GitHub, klik Clone, pilih SSH, dan salin URL-nya.

    • Branch: branch spesifik yang harus digunakan

    • Path: folder tempat submodule harus ditambahkan di branch Anda

Tip

Saat menambahkan repository yang berisi banyak modul, Anda mungkin ingin mengabaikan beberapa di antaranya jika ada yang terinstal secara otomatis. Untuk melakukannya, beri awalan folder submodule Anda dengan . (misalnya .folder). Platform akan mengabaikan folder ini, dan Anda dapat memilih sendiri modul yang diinginkan dengan membuat symbolic link ke modul tersebut dari folder lain.

Tindakan terjadwal

Di platform Odoo.sh, scheduled action diimplementasikan sedikit berbeda dari server Odoo biasa dan dijalankan secara best-effort. Hal ini karena mungkin ada beberapa pelanggan pada server yang sama, dan setiap pelanggan dijamin mendapatkan porsi yang adil dari sumber daya server. Oleh karena itu, waktu eksekusi yang tepat untuk scheduled action tidak dapat dijamin.

Penting

Jangan mengharapkan scheduled action dijalankan lebih sering dari setiap lima menit.

Karena waktu eksekusi tindakan terjadwal terbatas, disarankan untuk memastikan tindakan terjadwal Anda:

  • Bekerja dengan batch data kecil.

  • Melakukan commit setelah memproses setiap batch, sehingga jika terinterupsi oleh batas waktu, tidak perlu memulai dari awal.

  • Bersifat idempoten, yaitu tidak boleh menyebabkan efek samping jika dijalankan lebih sering dari yang diharapkan.