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ặc ipdb vào tệp requirements.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.

Ảnh chụp màn hình bảng điều khiển hiển thị ``pdb`` đang chạy trong shell Odoo.sh.