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
atauipdb
ke file projectrequirements.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.
