Skip to content

Instantly share code, notes, and snippets.

@rl4debug
Last active December 3, 2019 09:25
Show Gist options
  • Save rl4debug/4184601244d793dace81870fa82bc984 to your computer and use it in GitHub Desktop.
Save rl4debug/4184601244d793dace81870fa82bc984 to your computer and use it in GitHub Desktop.
[odoo cheatsheet] #odoo

0. Install environment (ubuntu, debian)

sudo pip3 install pyquerystring
sudo pip3 install parse-accept-language
apt-get install python3-pypdf2
sudo apt-get install libsasl2-dev python-dev libldap2-dev libssl-dev
sudo pip3 install -r requirements.txt

#Note for Debian, sometime we want to install dependencie packages.
sudo apt --fix-broken install
sudo apt-get install postgresql-11-postgis-2.5
sudo -H pip3 install pyscreenshot

1. Keywords

  • master password
    • ví dụ ta đặt trong odoo.conf 1 option có tên là admin_passwd = 1234. Vậy mỗi khi cần tạo db, switch db, ta cần phải nhập đúng pass đó vào để tiếp tục thực hiện.

Odoo có database manager web/database/manager, mục đích là để switch odoo hiện tại đến 1 db mới, với connection string như cũ, và các apps cần phải được cài lại trên db mới (nếu các apps đó chưa được cài trên db mới trước đó). Việc này giúp mình có thể liên tưởng đến các case sử dụng như sau:

  • Muốn thử cài lại tất cả trên 1 db hoàn toàn mới, phục vụ cho mục đích developement.
  • Nếu muốn migrate 1 số apps từ cũ sang mới?

2. Common errors

2.1 Cài đặt 2 odoo sử sử dụng chung user
  • Khi đó odoo không ra màn hình setup, mà ra luôn màn hình đăng nhập, vì sao?
  • Sau khi đăng nhập màn hình odoo thứ 2 sẽ ra trang trắng, trong khi odoo đầu tiên vẫn hoạt động, vì sao?
  • Vậy các phiên bản odoo khác nhau có liên quan gì khi chọn chung 1 user.
  • Ở database manager web/database/manager làm sao odoo xác định danh sách database?

3. Common work flows

# create user
create user odoo1 with password '123';
# grant privileges on user
alter user odoo1 createdb;

Sau đó start odoo sử dụng user vừa tạo.

docker run -p 8069:8069 --name odoo12 -v /Users/debug/Projects/odoo-addons:/mnt/extra-addons -e USER=odoo1 -e PASSWORD=123 -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=123  --link postgres10:db -t -d odoo:12

Câu lệnh này run odoo:12 với database là postgres10, user để đăng thực hiện tạo DB cho odoo trên postgres là odoo1 và pass là 123. Để odoo có thể tạo được db mới trên postgres, nó phải được cấu hình để có quyền đó alter user odoo1 createdb. Vậy POSTGRES_USER để làm gì?

Commands
# install my module. dev12 is database
./odoo-bin -d dev12 -i library_app
# upgrade app
./odoo-bin -d dev12 -u library_app,mail
# run doo with config
python3 /odoo/server/odoo-bin -r odoo -w odoo --db_host=0.0.0.0 --db_port=5432 --db-filter odoo111 --config=/odoo-server.conf


update ir_config_parameter set value = 'file' where key = 'ir_attachment.location';
update ir_config_parameter set value = 's3://access_key:secret_key@erp-attachment' where key = 'ir_attachment.location';

3. Odoo source code explanation

3.1 odoo.http
  • Trong http chứa request, request chứa session, session chứa tên db, user id (uid)
odoo folder
  • Trong odoo folder chứa các files như là models.py, fields.py, exception.py. Trong này chứa các func cơ bản để thao tác trên odoo. Ví dụ
    • models.py: trong này có sudo() trong trường hợp cần access resource với quyền SUPERUSER. sudo() là 1 method của BaseModel => tất cả các model đều có hàm này. Để truy xuất model, cú pháp quen thuộc là `request.env['model_name'].
    • search(): là 1 method của base model, bạn cần tìm model với các điều kiện nào?
    • TODO: tìm hiểu MetaModel, vì sao khi search 1 danh sách items, items có kiểu là MetaModel, nhưng type của items[0] cũng là MetaModel, vậy nó đại diện cho cái gì?

4. Backup and restore

revoke connect on database odoo0309 from public;
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE  pid <> pg_backend_pid() and datname = 'odoo0309';
drop database odoo0309;

5. Reference

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment