Managing Odoo Server Instances

Installing the Odoo Development Environment, chúng ta đã biết làm thế nào để thiết lập một instance Odoo chỉ sử dụng các module gốc. Phần này tập trung vào việc thêm các module tùy chỉnh vào một instance Odoo. Trong Odoo, bạn có thể nạp các module từ nhiều thư mục khác nhau. Ngoài ra, bạn nên nạp các module của bên thứ 3 hoặc các module tùy chỉnh của bạn từ các thư mục riêng biệt để tránh xung đột với các module gốc của Odoo.

Trong phần này, chúng tôi sẽ trình bày các phần sau:

Cấu hình đường dẫn add-ons

Với sự hỗ trợ của tham số addons_path, bạn có thể nạp các module mở rộng vào Odoo. Khi Odoo khởi tạo một database mới, nó sẽ tìm kiếm các module mở rộng trong các thư mục được cung cấp trong tham số cấu hình addons_path.

Các thư mục được liệt kê trong addons_path sẽ chứa các thư mục con, mỗi thư mục con là một module mở rộng. Sau khi khởi tạo database, bạn sẽ có thể cài đặt các module được cung cấp trong các thư mục này.

Chuẩn bị

Công thức này giả định rằng bạn đã có một instance sẵn sàng với file cấu hình được tạo, điều này được mô tả trong phần Lưu trữ cấu hình instance trong một fileInstalling the Odoo Development Environment. Lưu ý rằng mã nguồn của odoo có sẵn tại ~/git/odoo/odoo14, và file cấu hình trong ~/git/odoo/myodoo.cfg.

Thực hiện thế nào

Để thêm thư mục ~/git/odoo-dev/odoo-dev-14 vào addons_path của instance, thực hiện các bước sau:

  1. Chỉnh sửa file cấu hình cho instance của bạn, là file này: ~/git/odoo/myodoo.cfg.

  2. Xác định vị trí dòng bắt đầu với addons_path=. Mặc định, trông nó như sau:

    addons_path = ~/git/odoo/odoo14/addons
    
  3. Sửa đổi dòng này bằng cách thêm dấu phẩy, sau đó là đường dẫn tới thư mục của bạn, giống như đoạn sau đây:

    addons_path = ~/git/odoo/odoo14/addons,~/git/odoo-dev/odoo-dev-14
    
  4. Khởi động lại instance của bạn từ terminal:

    $ ~/git/odoo/odoo14/odoo-bin -c my-instance.cfg
    

Nó hoạt động thế nào

Khi Odoo đã được khởi động lại, file cấu hình được đọc. Giá trị của biến addons_path được mong đợi là một danh sách các thư mục được phân cách nhau bằng dấu phẩy. Đường dẫn tương đối được chấp nhận, nhưng chúng có liên quan đến thư mục làm việc hiện tại, vì thế phải tránh trong file cấu hình.

Tại thời điểm này, chúng tôi chỉ liệt kê ra thư mục mở rộng trong Odoo, nhưng không có module mở rộng nào có trong ~/git/odoo-dev/odoo-dev-14. Và ngay cả khi bạn thêm một module mới vào thư mục này, Odoo cũng không hiển thị module này trong giao diện người dùng. Đối với điều này, bạn cần thực hiện thêm một thao tác, được giải thích trong phần tiếp theo, Cập nhật danh sách module mở rộng.

Ghi chú

Lý do đằng sau việc này là khi bạn khởi tạo một database mới, Odoo tự động liệt kê các module tùy chỉnh của bạn trong các module có sẵn, nhưng nếu bạn thêm các module mới sau khi khởi tạo cơ sở dữ liệu, thì sau đó bạn sẽ phải cập nhật thủ công danh sách các module có sẵn, điều này được nêu trong phần Cập nhật danh sách module mở rộng.

Còn nữa

Khi bạn gọi lệnh odoo-bin lần đầu tiên để khởi tạo database mới, bạn có thể truyền tham số --addons-path trên dòng lệnh với một danh sách các thư mục được phân cách nhau bởi dấu phẩy. Việc này sẽ khởi tạo một danh sách các module mở rộng có sẵn với tất cả các module được tìm thấy trong đường dẫn add-ons. Khi bạn thực hiện việc này, bạn phải liệt kê một cách rõ ràng thư mục addons cơ sở (odoo14/odoo/addons), cũng như thư mục addons gốc (odoo14/addons). Một sự khác biệt nhỏ với công thức trước đó là các thư mục mở rộng của local không được để trống, chúng phải chứa ít nhất một thư mục con, mỗi thư mục con có cấu trúc của một module mở rộng.

Trong Creating Odoo Add-On Modules, chúng ta sẽ biết cách làm thế nào để tạo ra các module của riêng bạn. Trong khi chờ đợi phần này, thì đây là một thủ thuật nhanh chóng để tạo ra 1 module giúp thỏa mãn điều kiện của Odoo:

$ mkdir -p ~/odoo-dev/odoo-dev-14/education
$ touch ~/odoo-dev/odoo-dev-14/education/__init__.py
$ echo '{"name": "Education", "installable": False}' > ~/odoo-dev/odoo-dev-14/education/__manifest__.py

Bạn có thể sử dụng tùy chọn --save để lưu đường dẫn tới file cấu hình:'

$ odoo14/odoo-bin -d mydatabase \
--addons-path="odoo14/odoo/addons,odoo14/addons,~/odoo-dev/odoo-dev-14" \
--save -c ~/odoo-dev/my-instance.cfg --stop-after-init

Trong trường hợp này, sử dụng đường dẫn tương đối là được, vì chúng sẽ được chuyển đổi thành đường dẫn tuyệt đối trong file cấu hình.

Ghi chú

Vì Odoo chỉ kiểm tra các thư mục trong đường dẫn add-ons về sự hiện diện của các module mở rộng khi đường dẫn được thiết lập từ dòng lệnh, chứ không phải khi đường dẫn được nạp từ file cấu hình, module "education" không còn cần thiết nữa. Do đó, bạn có thể xóa nó đi (hoặc giữ nó cho đến khi bạn chắc chắn rằng sẽ không cần tạo một một file cấu hình mới nữa).

Chuẩn hóa bố cục của các thư mục trong instance

Chúng tôi khuyên rằng tất cả các môi trường phát triển của bạn đều nên sử dụng các bố cục thư mục giống nhau. Điều này sẽ hữu ích khi bạn phải thực hiện các hoạt động bảo trì, và nó cũng giúp giảm bớt các công việc hàng ngày của bạn. Công thức này tạo ra một cấu trúc thư mục nhóm các file có cùng phiên bản hoặc cùng mục đích trong các thư mục con được chuẩn hóa.

Ghi chú

Công thức này chỉ hữu ích nếu bạn muốn quản lý môi trường phát triển có cấu trúc thư mục tương tự. Nếu bạn không muốn điều này, bạn có thể bỏ qua công thức này.

Ngoài ra, không bắt buộc phải tuân theo cấu trúc thư mục giống như trong công thức này. Bạn có thể thay đổi cấu trúc này cho phù hợp với nhu cầu của bạn.

Thực hiện thế nào

Để tạo bố cục instance, bạn cần thực hiện các bước sau:

  1. Tạo một thư mục cho mỗi instance:

    $ mkdir ~/instance/projectname
    
  2. Tạo một môi trường ảo Python:

    $ sudo apt install python3.8-venv
    $ python3.8 -m venv ~/python-venv/3.8/odoo14
    
  3. Tạo một vài thư mục con, cách làm như sau:

    $ mkdir ~/git/odoo
    $ mkdir ~/git/odoo-dev
    
    cd ~/instance/projectname
    $ mkdir bin filestore logs
    

    Chức năng của các thư mục con như sau:

    • odoo/: Chứa bản sao của chính Odoo, cũng như các dự án bổ trợ khác nhau của bên thứ 3 (chúng tôi đã thêm mã nguồn của Odoo vào bước tiếp theo của công thức này).

    • odoo-dev/: Được sử dụng để lưu các add-ons dành riêng cho instance của bạn.

    • bin/: Bao gồm các lệnh đặc biệt.

    • filestore/: Được sử dụng như một file lưu trữ.

    • filestore/ (tùy chọn): Được sử dụng để lưu trữ các file log của server.

  4. Lấy mã nguồn Odoo từ github về local và cài đặt requirements (tham khảo Installing the Odoo Development Environment để biết thêm chi tiết):

    $ git clone git@github.com:Viindoo/odoo.git -b 14.0 git/odoo/odoo14
    $ ~/python-venv/3.8/odoo14/bin/python3.8 -m pip install -r git/odoo/odoo14/requirements.txt
    
  5. Lưu các lệnh đặc biệt sau đây vào bin/odoo:

    #!/bin/sh ROOT=$(dirname $0)/..
    PYTHON=$ROOT/python-venv/3.8/odoo14/bin/python3.8 ODOO=$ROOT/git/odoo/odoo14/odoo-bin
    $PYTHON $ODOO -c $ROOT/projectname.cfg "$@" exit $?
    
  6. Làm cho tập lệnh có thể thực thi được:

    $ chmod +x bin/odoo
    
  7. Tạo một module education rỗng:

    $ mkdir -p odoo-dev/odoo-dev-14/education
    $ touch odoo-dev/odoo-dev-14/education/__init__.py
    $ echo '{"name": "Education", "installable": False}' >\
    odoo-dev/odoo-dev-14/education/__manifest__.py
    
  8. Tạo một file cấu hình cho instance của bạn:

    $ bin/odoo --stop-after-init --save \
    --addons-path git/odoo/odoo14/odoo/addons,git/odoo/odoo14/addons,git/odoo-dev/odoo-dev-14
    \
    --data-dir filestore
    
  9. Thêm một file .gitignore, nó được sử dụng để yêu cầu GitHub bỏ qua các thư mục nhất định khi bạn tạo commit, ví dụ: filestore/, env/, logs/, và odoo/:

    # dotfiles, with exceptions:
    .*
    !.gitignore
    # python compiled files
    *.py[co]
    # emacs backup files
    *~
    # not tracked subdirectories
    /env/
    /odoo/
    /filestore/
    /logs/
    
  10. Tạo một repository cho instance này và thêm các file bạn có vào Git:

    $ git init
    $ git add .
    $ git commit -m "initial version of projectname"
    

Nó hoạt động thế nào

Chúng tôi tạo một cấu trúc thư mục rõ ràng với các thư mục có nhãn riêng biệt cho từng vai trò. Chúng tôi sử dụng các thư mục khác nhau để lưu trữ các thứ sau:

  • Code được bảo trì bởi Odoo (trong odoo/)

  • Code ở local

  • filestore của instance

Bằng cách có một môi trường ảo virtualevn cho mỗi dự án, chúng tôi đảm bảo rằng các dependency của dự án này sẽ không can thiệp vào dependency của dự án khác đang chạy một phiên bản Odoo khác hay sẽ sử dụng module của bên thứ ba, yêu cầu các phiên bản dependency Python khác nhau.

Tương tự, bằng cách sử dụng các bản sao riêng biệt của Odoo và các module mở rộng của bên thứ 3 cho các dự án khác nhau, chúng tôi có thể để mỗi dự án này phát triển độc lập và chỉ cài đặt các bản cập nhật trên các instance cần chúng, do đó giảm được nguy cơ của việc hồi quy.

Tập lệnh bin/odoo cho phép chúng tôi chạy máy chủ mà không cần phải nhớ các đường dẫn hoặc kích hoạt môi trường ảo virtualenv. Điều này cũng thiết lập file cấu hình cho chúng tôi. Bạn có thể thêm các tập lệnh mở rộng vào đó để giúp bạn trong công việc hàng ngày. Chẳng hạn, bạn có thể thêm một tập lệnh để kiểm tra các dự án của bên thứ 3 khác nhau mà bạn cần để chạy instance của mình.

Về file cấu hình, chúng tôi chỉ trình bày các tùy chọn tối thiểu để thiết lập ở đây, nhưng rõ ràng bạn có thể thiết lập thêm, chẳng hạn như tên database, bộ lọc database hoặc cổng cho mỗi dự án. Tham khảo Installing the Odoo Development Environment để biết thêm thông tin về điều này.

Cuối cùng, bằng cách quản lý tất cả những thứ này trong một repository của Git, nó trở nên khá dễ dàng để thiết lập lại trên một máy tính khác và chia sẻ việc phát triển trong một nhóm.

Mẹo

Để tạo điều kiện thuận lợi cho việc tạo dự án, bạn có thể tạo một mẫu repository có cấu trúc trống, và sao chép reporsitory đó cho mỗi dự án. Điều này sẽ giúp bạn không phải gõ lại tập lệnh bin/odoo, file .gitignore, và bất kỳ mẫu khác mà bạn cần (README.md, ChangeLog, v.v)

Còn nữa

Việc phát triển các module phức tạp đòi hỏi các tùy chọn cấu hình khác nhau, dẫn đến việc cập nhật file cấu hình bất cứ khi nào bạn muốn thử bất kỳ tùy chọn cấu hình nào. Cập nhật file cấu hình thường xuyên có thể là một vấn đề đau đầu và để tránh điều này, hãy thay thế bằng cách sử dụng tất cả các tùy chọn cấu hình bằng dòng lệnh, như sau:

  1. Kích hoạt môi trường ảo virtualenv thủ công:

    $ source python-venv/3.8/odoo14/bin/activate
    
  2. Trỏ tới thư mục của Odoo:

    $ cd git/odoo/odoo14
    
  3. Chạy server:

    ./odoo-bin --addons-path=addons,../../odoo-dev-14 -d test-14 -i
    account,sale,purchase --log-level=debug
    

Trong bước 3, chúng tôi đã sử dụng một số tùy chọn cấu hình trực tiếp từ dòng lệnh. Đầu tiên là --addons-path, điều này nạp thư mục add-ons gốc của Odoo (addons), và thư mục add-ons của bạn (odoo-dev-14), nơi mà chứa các module mở rộng của riêng bạn. Tùy chọn -d sẽ sử dụng database test-14 hoặc tạo mới một database nếu nó không tồn tại. Tùy chọn -i sẽ cài đặt các module account, sale, purchase. Tiếp theo, chúng tôi đã dùng tùy chọn log-level và đặt nó là debug, điều này giúp hiển thị nhiều thông tin hơn ở phần log.

Ghi chú

Bằng cách sử dụng dòng lệnh, bạn có thể nhanh chóng thay đổi các tùy chọn cấu hình. Bạn cũng có thể xem log trong terminal. Đối với tất cả các tùy chọn có sẵn, tham khảo Installing the Odoo Development Environment, hoặc sử dụng lệnh --help để xem danh sách tất cả các tùy chọn và mô tả cho từng tùy chọn.

Cài đặt và nâng cấp các module mở rộng

Chức năng cốt lõi của Odoo đến từ các module mở rộng của nó. Bạn có rất nhiều các module có sẵn của chính Odoo, cũng như các module mở rộng mà bạn có thể tải xuống từ Viindoo Marketplace hoặc do chính bạn viết ra.

Trong phần này, chúng tôi sẽ trình bày cách cài đặt và nâng cấp các module mở rộng từ giao diện web và từ dòng lệnh.

Các lợi ích của việc sử dụng dòng lệnh cho các hoạt động này là việc có thể kích hoạt nhiều add-on tại một thời điểm và có một cái nhìn rõ ràng về server log như là quá trình cài đặt hoặc cập nhật, điều này rất hữu ích khi ở chế độ nhà phát triển hoặc khi viết kịch bản cài đặt một instance.

Chuẩn bị

Đảm bảo rằng bạn có một instance Odoo đang chạy với database đã được khởi tạo và đường dẫn add-ons được thiết lập đúng. Trong phần này, chúng tôi sẽ cài đặt/cập nhật một vài module mở rộng.

Thực hiện thế nào

Có hai phương pháp khả thi để cài đặt hoặc cập nhật các module, bạn có thể sử dụng giao diện web hoặc giao diện dòng lệnh.

Từ giao diện web

Để cài đặt một module mở rộng mới trong database của bạn từ giao diện web, thực hiện các bước sau:

  1. Vào instance sử dụng tài khoản Administrator và mở menu Ứng dụng:

    ../../_images/managing-odoo-server-instances-01.vi.jpg
  2. Sử dụng thanh tìm kiếm và điền vào đó tên module bạn muốn cài đặt. Sau đây là một vài hướng dẫn cho việc này:

    • Kích hoạt bộ lọc Chưa cài đặt.

    • Nếu bạn đang tìm kiếm một module có chức năng mở rộng thay vì module có chức năng chính, bỏ bộ lọc Ứng dụng.

    • Gõ một phần của tên module trong thanh tìm kiếm.

    • Bạn có thể thấy rằng sử dụng giao diện list sẽ có một số thông tin dễ đọc hơn.

  3. Click vào nút Cài đặt dưới tên module trong thẻ.

Lưu ý rằng một số module của Odoo phụ thuộc vào các thư viện Python bên ngoài. Nếu các thư viện python không được cài đặt trong hệ thống của bạn, thì Odoo sẽ hủy cài đặt module và hiển thị cảnh báo.

Để khắc phục điều này, hãy cài đặt các thư viện Python cần thiết trên hệ thống của bạn.

Để cập nhật module đã cài đặt trước đó trong cơ sở dữ liệu của bạn, thực hiện các bước sau:

  1. Đăng nhập vào instance bằng tài khoản Administrator.

  2. Mở menu Ứng dụng

  3. Click vào Ứng dụng:

    ../../_images/managing-odoo-server-instances-02.vi.jpg
  4. Sử dụng thanh tìm kiếm tìm module bạn muốn cập nhật. Sau đây là một vài lời khuyên:

    • Kích hoạt bộ lọc Đã cài đặt.

    • Nếu bạn đang tìm kiếm một module có chức năng mở rộng thay vì module có chức năng chính, bỏ bộ lọc Ứng dụng.

    • Gõ một phần của tên module trong thanh tìm kiếm.

    • Bạn có thể thấy rằng sử dụng giao diện list sẽ có một số thông tin dễ đọc hơn.

  5. Click vào 3 dấu chấm bên góc phải trên cùng của thẻ và sau đó chọn Nâng cấp:

    ../../_images/managing-odoo-server-instances-03.vi.jpg

Kích hoạt chế độ nhà phát triển để nhìn thấy tên kỹ thuật của module. Xem Installing the Odoo Development Environment nếu bạn không biết các làm thế nào để kích hoạt chế độ nhà phát triển:

../../_images/managing-odoo-server-instances-04.vi.jpg

Sau khi kích hoạt chế độ nhà phát triển, tên kỹ thuật của module sẽ được hiển thị với màu đỏ.

Từ dòng lệnh

Để cài đặt một module mới từ database của bạn, thực hiện các bước sau:

  1. Tìm tên của module. Đây là tên của thư mục chứa file __manifesst__.py, chỉ cần tên thư mục, không cần đường dẫn đến thư mục này.

  2. Dừng instance. Nếu bạn đang làm việc trên một database, hãy tạo bản sao lưu.

  3. Chạy câu lệnh sau:

$ git/odoo/odoo14/odoo-bin -c instance.cfg -d dbname -u addon1 \
--stop-after-init

Bạn có thể bỏ qua -d dbname nếu nó được thiết lập trong file cấu hình.
  1. Khởi động lại instance.

Nó hoạt động thế nào

Việc cài đặt và nâng cấp module là hai việc liên quan chặt chẽ với nhau, nhưng có một vài điểm khác biệt quan trọng được liệt kê ở 2 phần sau:

Cài đặt module

Khi bạn cài đặt một module, Odoo kiểm tra danh sách các module có sẵn để xác định để tìm module này ở trạng thái chưa cài đặt. Nó cũng kiểm tra các module mà module này phụ thuộc vào, nếu có thì nó sẽ cài đặt chúng trước khi cài đặt module này.

Quá trình cài đặt của một module bao gồm các bước sau:

  1. Chạy preinit hook của module.

  2. Nạp các model từ mã nguồn Python và cập nhật cấu trúc database, nếu cần thiết (tham khảo Application Models).

  3. Nạp file data của module và cập nhật nội dụng của database. Nếu cần thiết (tham khảo Managing Module Data).

  4. Cài đặt dữ liệu demo nếu dữ liệu demo được kích hoạt trong instance.

  5. Chạy postinit hook nếu có.

  6. Chạy các phần view của module.

  7. Nếu dữ liệu demo được kích hoạt và test được kích hoạt, chạy test của module (tham khảo Remote Procedure Calls in Odoo).

  8. Cập nhật trạng thái module trong database.

  9. Cập nhật phần dịch trong database từ phần dịch của module (tham khảo Installing the Odoo Development Environment).

    Ghi chú

    preinit hook và postinit hook được xác định trong file __manifest__.py sử dụng từ khóa pre_init_hookpost_init_hook. Những hook này được sử dụng để gọi các hàm Python trước và sau khi cài đặt một module. Để biết thêm về init hook, tham khảo Creating Odoo Add-On Modules.

Nâng cấp module

Khi bạn nâng cấp một module, Odoo sẽ kiểm tra danh sách module có sẵn để tìm module này ở trạng thái "đã cài đặt". Nó cũng kiểm tra các module phụ thuộc vào module này, nếu có, chúng cũng sẽ được nâng cấp.

Quá trình nâng của một module bao gồm các bước sau:

  1. Chạy các bước pre-migration nếu có (tham khảo Managing Module Data).

  2. Nạp các model từ mã nguồn Python và cập nhật cấu trúc database, nếu cần thiết (tham khảo Application Models).

  3. Nạp file data của module và cập nhật nội dụng của database. nếu cần thiết (tham khảo Managing Module Data).

  4. Cài đặt dữ liệu demo nếu dữ liệu demo được kích hoạt trong instance.

  5. Nếu module có bất kỳ phương thức migration nào, chạy các bước post-migration (tham khảo Managing Module Data).

  6. Chạy các phần view của module.

  7. Nếu dữ liệu demo được kích hoạt và test được kích hoạt, chạy test của module (tham khảo Remote Procedure Calls in Odoo).

  8. Cập nhật trạng thái module trong database.

  9. Cập nhật phần dịch trong database từ phần dịch của module (tham khảo Internationalization)

    Ghi chú

    Lưu ý rằng việc nâng cấp một module chưa được cài đặt sẽ không có tác dụng. Tuy nhiên, việc cài đặt một module đã được cài đặt sẽ cài đặt lại module đó, điều này có thể gây ra một số tác động không mong muốn với một số file dữ liệu chứa các dữ liệu được cập nhật bởi người dùng mà không được cập nhật trong quá trình nâng cấp module thông thường.

Còn nữa

Cẩn thận với việc xử lý các module phụ thuộc. Hãy xem xét một trường hợp mà bạn muốn cài đặt module sale, sale_stocksale_specific. Module sale_specific phụ thuộc vào module sale_stock, module sale_stock lại phụ thuộc vào module sale. Để cài đặt cả 3 module này, bạn chỉ cần cài đặt sale_specific, các module sale_stocksale sẽ được tự động cài đặt một cách đệ quy. Khi muốn nâng cấp cả 3 module, bạn chỉ cần cập nhật module sale, các module phụ thuộc vào nó sẽ được cập nhật tự động.

Một phần khó khăn với việc quản lý các module phụ thuộc là khi bạn thêm một module phụ thuộc vào một bản đã được cài đặt. Hãy hiểu rõ hơn về điều này bằng cách tiếp tục với ví dụ trước đó. Hãy tưởng tượng rằng bạn thêm module phụ thuộc là stock_dropshipping trong module sale_specific (module sale_specific phụ thuộc vào module stock_dropshipping). Khi cập nhật module sale_specific, module stock_dropshipping sẽ không được tự động cài đặt. Trong trường hợp này, bạn có thể nhận được thông báo lỗi rất khó chịu vì mã Python của của module không được nạp thành công, nhưng dữ liệu của module và bảng của model trong database đã có. Để giải quyết vấn đề này, bạn cần dừng instance và cài đặt thủ công module stock_dropshipping.

Cài đặt các module mở rộng từ Github

GitHub là một nguồn module mở rộng của bên thứ ba rất tốt. Rất nhiều đối tác của Odoo sử dụng GitHub để chia sẻ các module mở rộng mà họ bảo trì trong nội bộ và Odoo Community Association (OCA) bảo trì một cách tập thể hàng trăm module trên GitHub. Trước khi bạn bắt đầu viết một module của riêng mình, hãy kiểm tra để đảm bảo rằng nó chưa hề tồn tại.

Công thức này sẽ chỉ cho bạn cách sao chép (clone) dự án partner-contact của OCA từ GitHub và làm cho các module của nó xuất hiện trong instance của bạn.

Chuẩn bị

Giả sử bạn muốn thêm các trường mới vào form Liên hệ (partner). Mặc định, model Liên hệ (res.partner) của Odoo không có trường Giới tính. Nếu bạn muốn thêm trường giới tính, bạn cần tạo một module mới. May mắn thay, ai đó cho bạn biết về module partner_contract_gender, được bảo trì bởi OCA và nằm trong dự án partner-contact.

Các đường dẫn trong công thức này phản ánh bố cục thư mục trong phần Chuẩn hóa bố cục của các thư mục trong instance.

Thực hiện thế nào

Để cài đặt module partner_contact_gender, thực hiện các bước sau:

  1. Trỏ tới thư mục dự án của bạn:

    $ cd ~/git/OCA/partner-contact
    
  2. Clone nhánh 14.0 của dự án partner-contact vào thư mục partner-contact:

    $ git clone https://github.com/OCA/partner-contact.git src/partner-contact --branch 14.0 partner-contact-14
    
  3. Thay đổi đường dẫn add-ons để bao gồm thư mục partner-contact-14 và cập nhật danh sách module mới cho instance của bạn (tham khảo phần Cấu hình đường dẫn add-onsCập nhật danh sách module mở rộng trong phần này).

    addons_path = ~/git/odoo/odoo14/odoo/addons,~/git/odoo/odoo14/addons,~/git/odoo-dev/odoo-dev-14,~/git/partner-contact/partner-contact-14
    
  4. Cài đặt module partner_contact_gender (nếu bạn không biết cách cài đặt module, hãy xem phần trước, Cài đặt và nâng cấp các module mở rộng).

Nó hoạt động thế nào

Tất cả các repository của OCA đều có các module mở rộng trong các thư mục con riêng biệt, thống nhất theo những gì Odoo mong đợi. Do đó, chỉ cần sao chép repository ở đâu đó và thêm địa chỉ của nó vào đường dẫn add-ons là đủ.

Còn nữa

Một số người bảo trì làm theo cách khác, có một module mở rộng cho mỗi repository. Trong trường hợp đó, bạn cần tạo một repository mới, sao chép tất cả các module mở rộng từ người bảo trì vào thư mục này, sau đó bổ sung địa chỉ repository này vào đường dẫn add-ons. Hãy nhớ cập nhật danh sách module mỗi khi bạn thêm một bản sao repository mới.

Áp dụng thay đổi trên module mở rộng

Hầu hết các module mở rộng có sẵn trên GitHub có thể thay đổi vào không tuân theo các quy tắc mà Odoo thực hiện cho bản đang hoạt động ổn định của nó. Họ có thể nhận được các bản sửa lỗi hoặc cải tiến, bao gồm các vấn đề hoặc các yêu cầu tính năng mà bạn đã gửi, và những thay đổi có thể là cấu trúc cơ sở dữ liệu hoặc những cập nhật trong các file dữ liệu và giao diện. Công thức này giải thích cách cài đặt các phiên bản cập nhật.

Chuẩn bị

Giả sử bạn đã tạo một issue với module partner_contact_gender và nhận được một thống báo rằng issue đã được giải quyết trong bản sửa đổi cuối cùng của nhánh 14.0 của dự án partner-contact. Trong trường hợp này, bạn sẽ muốn cập nhật instance của mình với phiên bản mới nhất.

Thực hiện thế nào

Để áp dụng các thay đổi mã nguồn cho module của bạn từ GitHub, bạn cần thực hiện các bước sau:

  1. Dừng instance sử dụng module này.

  2. Thực hiện sao lưu nếu nó là một instance đã có dữ liệu (tham khảo phần Quản lý cơ sở dữ liệu server Odoo trong Installing the Odoo Development Environment).

  3. Trỏ tới thư mục mà partner-contact-14:

    $ cd ~/git/partner-contact/partner-contact-14
    
  4. Tạo một thẻ cục bộ cho dự án để bạn có thể revert về phiên bản đó trong trường hợp mọi thứ bị hỏng:

    $ git checkout 14.0
    $ git tag 14.0-before-update-$(date --iso)
    
  5. Lấy về bản mã nguồn mới nhất:

    $ git pull --ff-only
    
  6. Nâng cấp module partner_address_street3 trong cơ sở dữ liệu của bạn (tham khảo phần Cài đặt và nâng cấp các module mở rộng).

  7. Restart lại instance.

Nó hoạt động thế nào

Thông thường, nhà phát triển của module mở rộng đôi khi phát hành phiên bản mới nhất của module. Bản cập nhật này thường chứa các bản sửa lỗi và các tính năng mới. Tại đây, chúng ta sẽ nhận được phiên bản mới của module và cập nhật nó trong các instance của chúng ta.

Nếu lệnh git pull --ff-only bị lỗi, bạn có thể revert về phiên bản trước đó sử dụng câu lệnh sau:

$ git reset --hard 14.0-before-update-$(date --iso)

Sau đó, bạn có thể thử lệnh git pull (không có --ff-only), điều này sẽ gây ra một sự hợp nhất (merge), nhưng điều này có nghĩa là bạn có các thay đổi cục bộ trên module.

Xem thêm

Nếu bước cập nhật bị hỏng, hãy tham khảo phần Cập nhật Odoo từ Nguồn trong Installing the Odoo Development Environment, để xem cách dẫn khôi phục. Nhớ rằng luôn kiểm tra bản cập nhật trên bản sao của database trước.

Áp dụng và thử các pull request được đề xuất

Trong thế giới GitHub, một Pull Request (PR) là một yêu cầu do nhà phát triển đưa ra để những người bảo trì của một dự án có thể áp dụng một số thay đổi trên dự án. Một PR như vậy có thể chứa một bản sửa lỗi hoặc một tính năng mới. Các yêu cầu này được review và test trước khi được gộp vào nhánh chính.

Công thức này giải thích cách áp dụng PR cho dự án Odoo của bạn để test một bản cải tiến hoặc bản sửa lỗi.

Chuẩn bị

Như trong công thức trước, giả sử bạn tạo một issue với module partner_address_street3 và nhận được thông báo rằng vấn đề đã được giải quyết trong một PR, nhưng PR này vẫn chưa được merge vào nhánh 14.0 của dự án. Nhà phát triển yêu cầu bạn xác thực bạn sửa lỗi trong PR #123. Bạn cần cập nhật một instance test với nhánh này.

Bạn không nên thử trực tiếp các nhánh như vậy trên database thật, vì vậy trước tiên hãy tạo một môi trường test với bản sao của cơ sở dữ liệu thật (tham khảo Installing the Odoo Development Environment).

Thực hiện thế nào

Để áp dụng và dùng thử một PR của GitHub cho một module, bạn cần thực hiện các bước sau:

  1. Dừng instance:

  2. Trỏ tới thư mục chứa các module của dự án partner-contact:

    $ cd ~/git/partner-contact/partner-contact-14
    
  3. Tạo thẻ cục bộ cho dự án để bạn có thể revert về phiên bản trước đó trong trường hợp mọi thứ bị hỏng:

    $ git checkout 14.0
    $ git tag 14.0-before-update-$(date --iso)
    
  4. Pull nhánh của pull requesst. Cách dễ nhất để làm điều này là sử dụng số của PR. Trong ví dụ, đây là PR số 123:

    $ git pull origin pull/123/head
    
  5. Cập nhật module partner_contact_gender1 trong cơ sở dữ liệu của bạn và khởi động lại instance (tham khảo công thức Cài đặt và nâng cấp các module mở rộng nếu bạn không biết cách cập nhật module).

  6. Test bản cập nhật, cố gắng tái tạo lại issue của bạn, hoặc thử tính năng bạn muốn.

Nếu nó không hoạt động, hãy bình luận trên trang PR của GitHub, giải thích những gì bạn đã làm và những gì không hoạt động để nhà phát triển có thể cập nhật PR.

Nếu nó hoạt động, hãy bình luận như vậy trên trang PR, đây là một phần thiết yếu của quá trình xác nhận PR, và nó sẽ tăng tốc độ được merge trong nhánh chính.

Nó hoạt động thế nào

Chúng ta đang sử dụng một tính năng của GitHub cho phép các pull request được pull theo số bằng cách sử dụng tên nhánh pull / nnnn / head, trong đó nnnn là số của PR. Lệnh pull của Git sẽ merge nhánh đó vào nhánh của chúng ta, áp dụng các thay đổi trong mã nguồn của chúng ta. Sau đó, chúng ta cập nhật module mở rộng, test nó và báo cáo lại cho tác giả của của PR này rằng nó đã thất bại hay thành công.

Còn nữa

Bạn có thể lặp lại bước 4 của công thức này cho các pull request khác nhau trong cùng một repository nếu bạn muốn kiểm tra chúng đồng thời. Nếu bạn thực sự hài lòng với kết quả, bạn có thể tạo một nhánh để giữ tham chiếu đến kết quả của các thay đổi được áp dụng:

$ git checkout -b 14.0-custom

Sử dụng một nhánh khác sẽ giúp bạn nhớ rằng bạn không sử dụng phiên bản từ GitHub, nhưng nó là một tùy chỉnh.

Ghi chú

Lệnh git branch có thể được sử dụng để liệt kê tất cả các nhánh trên local mà bạn có trong repository của bạn.

Từ đó trở đi, nếu bạn cần áp dụng bản sửa đổi mới nhất của nhánh 14.0 từ GitHub, bạn sẽ cần phải pull nó mà không sử dụng --ff-only:

$ git pull origin 14.0