Hộp đựng¶
Tổng quan¶
Mỗi bản dựng được cách ly trong vùng chứa riêng của nó (vùng chứa không gian tên Linux).
Cơ sở là một hệ thống Ubuntu, nơi cài đặt tất cả các phần phụ thuộc cần thiết của Odoo cũng như các gói hữu ích thông thường.
Nếu dự án của bạn yêu cầu các phần phụ thuộc Python bổ sung hoặc các bản phát hành gần đây hơn, bạn có thể xác định tệp requirements.txt
trong thư mục gốc của các nhánh liệt kê chúng. Nền tảng sẽ đảm nhiệm việc cài đặt các phần phụ thuộc này trong vùng chứa của bạn. Tài liệu về bộ xác định yêu cầu pip có thể giúp bạn viết tệp requirements.txt
. Để có ví dụ cụ thể, hãy xem tệp requirements.txt của Odoo.
Các tệp requirements.txt
của mô-đun con cũng được tính đến. Nền tảng tìm kiếm các tệp requirements.txt
trong mỗi thư mục chứa các mô-đun Odoo: Không phải trong chính thư mục mô-đun mà trong thư mục mẹ của chúng.
Cấu trúc thư mục¶
Vì các bộ chứa dựa trên Ubuntu nên cấu trúc thư mục của chúng tuân theo Tiêu chuẩn phân cấp hệ thống tập tin linux. Tổng quan về cây hệ thống tập tin của Ubuntu giải thích các thư mục chính.
Dưới đây là các thư mục thích hợp của Odoo.sh:
.
├── 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
Cả Python 2.7 và 3.5 đều được cài đặt trong vùng chứa. Tuy nhiên:
Nếu dự án của bạn được cấu hình để sử dụng Odoo 10.0 thì máy chủ Odoo sẽ chạy với Python 2.7.
Nếu dự án của bạn được định cấu hình để sử dụng Odoo 11.0 trở lên thì máy chủ Odoo sẽ chạy với Python 3.5.
Vỏ cơ sở dữ liệu¶
Trong khi truy cập vùng chứa bằng shell, bạn có thể truy cập cơ sở dữ liệu bằng cách sử dụng 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=>
Hãy cẩn thận ! Sử dụng các giao dịch (BEGIN...COMMIT/ROLLBACK) cho mọi sql * các câu lệnh dẫn đến thay đổi (*UPDATE, DELETE, ALTER, ...), đặc biệt đối với cơ sở dữ liệu sản xuất của bạn.
Cơ chế giao dịch là mạng lưới an toàn của bạn trong trường hợp có sai sót. Bạn chỉ cần khôi phục các thay đổi của mình để hoàn nguyên cơ sở dữ liệu về trạng thái trước đó.
Ví dụ: có thể xảy ra trường hợp bạn quên đặt điều kiện WHERE.
odoo-addons-master-1=> BEGIN;
BEGIN
odoo-addons-master-1=> UPDATE res_users SET password = '***';
UPDATE 457
odoo-addons-master-1=> ROLLBACK;
ROLLBACK
Trong trường hợp như vậy, bạn có thể khôi phục để hoàn nguyên những thay đổi không mong muốn mà bạn vừa thực hiện nhầm và viết lại câu lệnh:
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
Tuy nhiên, đừng quên cam kết hoặc khôi phục giao dịch của bạn sau khi thực hiện xong. Các giao dịch mở có thể khóa các bản ghi trong bảng của bạn và cơ sở dữ liệu đang chạy của bạn có thể đợi chúng được giải phóng. Nó có thể khiến máy chủ bị treo vô thời hạn.
Ngoài ra, khi có thể, hãy sử dụng cơ sở dữ liệu dàn dựng của bạn để kiểm tra các tuyên bố của bạn trước tiên. Nó cung cấp cho bạn một mạng lưới an toàn bổ sung.
Chạy máy chủ Odoo¶
Bạn có thể khởi động phiên bản máy chủ Odoo từ vỏ container. Bạn sẽ không thể truy cập nó từ thế giới bên ngoài bằng trình duyệt, nhưng bạn có thể:
sử dụng vỏ Odoo,
$ 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'
cài đặt một mô-đun,
$ odoo-bin -i sale --without-demo=all --stop-after-init
cập nhật một mô-đun,
$ odoo-bin -u sale --stop-after-init
chạy thử nghiệm cho một mô-đun,
$ odoo-bin -i sale --test-enable --log-level=test --stop-after-init
Trong các lệnh trên, đối số:
--without-demo=all
ngăn tải dữ liệu demo cho tất cả các mô-đun--stop-after-init
sẽ ngay lập tức tắt phiên bản máy chủ sau khi nó hoàn thành các thao tác bạn yêu cầu.
Các tùy chọn khác có sẵn và được trình bày chi tiết trong Tài liệu CLI.
Bạn có thể tìm thấy trong nhật ký (~/logs/odoo.log) đường dẫn addons được Odoo.sh sử dụng để chạy máy chủ của bạn. Tìm kiếm "odoo: đường dẫn addons":
2018-02-19 10:51:39,267 4 INFO ? odoo: Odoo version 17.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/17.0', '/home/odoo/src/user', '/home/odoo/src/enterprise', '/home/odoo/src/themes', '/home/odoo/src/odoo/addons', '/home/odoo/src/odoo/odoo/addons']
Hãy cẩn thận, đặc biệt với cơ sở dữ liệu sản xuất của bạn. Các hoạt động mà bạn thực hiện khi chạy phiên bản máy chủ Odoo này không bị cô lập: Các thay đổi sẽ có hiệu lực trong cơ sở dữ liệu. Luôn luôn thực hiện các bài kiểm tra trong cơ sở dữ liệu dàn dựng của bạn.
Gỡ lỗi trong Odoo.sh¶
Việc gỡ lỗi bản dựng Odoo.sh không thực sự khác biệt so với các ứng dụng Python khác. Bài viết này chỉ giải thích các đặc điểm và hạn chế của nền tảng Odoo.sh và giả định rằng bạn đã biết cách sử dụng trình gỡ lỗi.
Ghi chú
Nếu bạn chưa biết cách gỡ lỗi ứng dụng Python, có nhiều khóa học giới thiệu có thể dễ dàng tìm thấy trên Internet.
Bạn có thể sử dụng pdb
, pudb
hoặc ipdb
để gỡ lỗi mã của mình trên Odoo.sh. Vì máy chủ được chạy bên ngoài shell nên bạn không thể khởi chạy trình gỡ lỗi trực tiếp từ phần phụ trợ phiên bản Odoo của mình vì trình gỡ lỗi cần có shell để hoạt động.
pdb được cài đặt theo mặc định trong mọi vùng chứa.
Nếu bạn muốn sử dụng pudb hoặc ipdb bạn phải cài đặt nó trước.
Để làm như vậy, bạn có hai lựa chọn:
tạm thời (chỉ trong bản dựng hiện tại):
$ pip install pudb --user
hoặc
$ pip install ipdb --user
vĩnh viễn: thêm
pudb
hoặcipdb
vào tệprequirements.txt
dự án của bạn.
Sau đó chỉnh sửa mã nơi bạn muốn kích hoạt trình gỡ lỗi và thêm mã này:
import sys
if sys.__stdin__.isatty():
import pdb; pdb.set_trace()
Điều kiện sys.__stdin__.isatty()
là một bản hack phát hiện xem bạn có chạy Odoo từ shell hay không.
Lưu tệp rồi chạy Odoo Shell:
$ odoo-bin shell
Cuối cùng, thông qua Odoo Shell, bạn có thể kích hoạt đoạn mã/chức năng/phương thức mà bạn muốn gỡ lỗi.
