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:
Áp dụng và thử các pull request được đề xuất
Ghi chú
Trong phần này, chúng tôi sử dụng các thuật ngữ như "module", "module mở rộng", hoặc "ứng dụng", đều là nhắc tới các ứng dụng gốc của Odoo hoặc các ứng dụng ngoài, những cái mà có thể cài đặt trên Odoo từ giao diện người dùng.
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 file ở Installing 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:
Chỉnh sửa file cấu hình cho instance của bạn, là file này:
~/git/odoo/myodoo.cfg
.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
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
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:
Tạo một thư mục cho mỗi instance:
$ mkdir ~/instance/projectname
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
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.
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
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 $?
Làm cho tập lệnh có thể thực thi được:
$ chmod +x bin/odoo
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
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
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/
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:
Kích hoạt môi trường ảo
virtualenv
thủ công:$ source python-venv/3.8/odoo14/bin/activate
Trỏ tới thư mục của Odoo:
$ cd git/odoo/odoo14
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:
Vào instance sử dụng tài khoản Administrator và mở menu Ứng dụng:
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.
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:
Đăng nhập vào instance bằng tài khoản Administrator.
Mở menu Ứng dụng
Click vào Ứng dụng:
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.
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:
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:
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:
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.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.
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.
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:
Chạy
preinit
hook của module.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).
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).
Cài đặt dữ liệu demo nếu dữ liệu demo được kích hoạt trong instance.
Chạy
postinit
hook nếu có.Chạy các phần view của module.
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).
Cập nhật trạng thái module trong database.
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óapre_init_hook
vàpost_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:
Chạy các bước
pre-migration
nếu có (tham khảo Managing Module Data).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).
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).
Cài đặt dữ liệu demo nếu dữ liệu demo được kích hoạt trong instance.
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).Chạy các phần view của module.
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).
Cập nhật trạng thái module trong database.
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_stock
và sale_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_stock
và sale
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:
Trỏ tới thư mục dự án của bạn:
$ cd ~/git/OCA/partner-contactClone 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-14Thay đổi đường dẫn
add-ons
để bao gồm thư mụcpartner-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-ons và Cậ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-14Cà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:
Dừng instance sử dụng module này.
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).
Trỏ tới thư mục mà
partner-contact-14
:$ cd ~/git/partner-contact/partner-contact-14Tạ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)Lấy về bản mã nguồn mới nhất:
$ git pull --ff-onlyNâ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).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:
Dừng instance:
Trỏ tới thư mục chứa các module của dự án
partner-contact
:$ cd ~/git/partner-contact/partner-contact-14Tạ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)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/headCậ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).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