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
For a concrete example, check out the Odoo Community requirements.txt file.
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.
Lihat juga
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-initTip
Argumen
--without-demo=allmencegah data demo dimuat untuk semua modul.Argumen
--stop-after-initlangsung 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
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
pudbatauipdbke filerequirements.txtproyek Anda, atausecara sementara (hanya pada build saat ini) dengan menjalankan perintah yang sesuai:
pip install pudb --user
pip install ipdb --user
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.Selanjutnya, simpan file tersebut dan jalankan Odoo shell:
odoo-bin shell
Gunakan Odoo shell untuk memicu kode yang ingin Anda debug.
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.
Dari tampilan Branch di project Odoo.sh Anda, pilih branch tempat Anda ingin menambahkan submodule.
Di pojok kanan atas, klik Submodule, lalu Run on Odoo.sh.
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
Di terminal, di folder di mana repository Git Anda di-clone, checkout branch di mana Anda ingin menambahkan submodul:
git checkout <branch>
Tambahkan submodule:
git submodule add -b <branch> <git@yourprovider.com>:<username/repository.git> <path>
<git@yourprovider.com>:<username/repository.git>: URL SSH dari repository yang ingin Anda tambahkan sebagai submodule
<branch>: branch yang ingin Anda gunakan di repository di atas
<path>: folder tempat Anda ingin menambahkan submodule ini
Commit dan push perubahan:
git commit -a && git push -u <remote> <branch><remote>: repository tempat Anda ingin mem-push perubahan Anda. Pada setup Git standar, ini adalah origin.
<branch>: branch tempat Anda ingin mem-push perubahan Anda. Kemungkinan besar, ini adalah branch yang Anda checkout pada langkah pertama.
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.