Những bài viết cần đọc trước khi cài odoo

Hướng dẫn cài đặt OpenSSL trên Windows 10

Hiện nay, rất nhiều dự án thương mại điện tử và ứng dụng, phát triển trên máy cục bộ Windows 10 của mình và tôi cần kiểm tra các khu vực an toàn của trang web như kiểm tra, hình thức thanh toán và đăng ký. Tất cả các loại biểu mẫu này đều yêu cầu dữ liệu được mã hóa bằng chứng chỉ SSL sử dụng HTTPS. Nhưng làm cách nào để HTTPS hoạt động trong Windows 10

PostgreSQL version 12.9 (Ubuntu 12.9-0ubuntu0.20.04.1)

https://stackjava.com/ssl/huong-dan-cai-dat-openssl-tren-windows-10.html

https://zeropointdevelopment.com/how-to-get-https-working-in-windows-10-localhost-dev-environment/

Cách cấp quyền truy cập cổng thông tin khách hàng trong Odoo

Odoo có mô-đun cổng thông tin khách hàng, với mô-đun này, khách hàng của chúng tôi có thể đăng nhập vào trang web odoo của chúng tôi và xem các giao dịch của họ. Trong cổng thông tin khách hàng, khách hàng có thể xem các đơn đặt hàng chưa xử lý, đơn đặt hàng đã hoàn thành, hóa đơn chưa thanh toán và các thông tin khác. Khách hàng cũng có thể tải xuống các tài liệu giao dịch của họ như hóa đơn và liên lạc với chúng tôi bằng cách gửi tin nhắn.

Bằng cách cung cấp quyền truy cập cổng thông tin khách hàng cho khách hàng của chúng tôi, tôi tin rằng nó có thể làm tăng sự tin tưởng vào các dịch vụ hoặc sản phẩm mà chúng tôi bán. Vì có sự minh bạch trong quá trình hoàn thành giao dịch của khách hàng.

Trước khi cấp quyền truy cập cổng thông tin khách hàng cho khách hàng của chúng tôi, hãy đảm bảo rằng máy chủ odoo của chúng tôi có thể được truy cập qua internet và đảm bảo rằng chúng tôi có miền web. Nếu khách hàng của chúng tôi không nhớ IP máy chủ của chúng tôi, thường không phải là một con số đẹp, chúng tôi không thể có miền web hoặc địa chỉ trang web. Nhưng tôi tin rằng họ sẽ phàn nàn nếu chúng tôi không có miền web. Tiếp theo, trong chế độ gỡ lỗi, hãy đảm bảo rằng mô-đun cổng (portal) đã được cài đặt.

Những bài viết cần đọc trước khi cài odoo

Sau đó, định cấu hình Máy chủ Email Đi trên menu Cài đặt >> Kỹ thuật >> Email >> Máy chủ Email Đi (Settings >> Technical >> Email >> Outgoing Email Servers). Máy chủ Email Đi là địa chỉ email sẽ được odoo sử dụng để gửi tin nhắn cho khách hàng của chúng tôi. Ví dụ, để mời họ đăng nhập vào trang cổng thông tin khách hàng.

Những bài viết cần đọc trước khi cài odoo

Hình trên là một ví dụ về cách cấu hình Máy chủ Email Đi bằng gmail. Nếu bạn đang sử dụng gmail, hãy đảm bảo rằng bạn đã tạo Mật khẩu ứng dụng . Sau đó Nhấp vào nút Kiểm tra kết nối và đảm bảo rằng không có lỗi.

Vào menu Settings >> Technical >> Parameters >> System Parameters , sau đó xem tham số bằng khóa của web.base.url . Thêm tên miền web odoo của chúng tôi, như bên dưới.

Những bài viết cần đọc trước khi cài odoo

Để cung cấp cho khách hàng hiện tại quyền truy cập cổng thông tin khách hàng, hãy mở biểu mẫu khách hàng chính và đảm bảo rằng email của họ đã được điền. Sau đó nhấp vào nút Hành động và chọn Cấp quyền truy cập Cổng thông tin .

Những bài viết cần đọc trước khi cài odoo

Sau đó, một cửa sổ mới sẽ xuất hiện. Trong cửa sổ đó, hãy đảm bảo rằng hộp kiểm Trong Cổng được chọn. Sau đó nhấp vào nút Áp dụng.

Những bài viết cần đọc trước khi cài odoo

Sau đó khách hàng sẽ nhận được một email như bên dưới.

Những bài viết cần đọc trước khi cài odoo

Nếu khách hàng nhấp vào liên kết trên email đó, khách hàng sẽ được chuyển hướng đến trang web odoo của chúng tôi và sẽ được yêu cầu điền mật khẩu cổng thông tin khách hàng của họ như bên dưới.

Những bài viết cần đọc trước khi cài odoo

Sau đó, khách hàng có thể đăng nhập vào trang cổng thông tin khách hàng của họ. Đây là một số thông tin mà khách hàng có thể xem trong trang cổng thông tin khách hàng của odoo 13.

Trang chủ cổng thông tin khách hàng, với số lượng Đơn đặt hàng và Hóa đơn.Những bài viết cần đọc trước khi cài odoo
Chi tiết đơn bán hàng với các thông tin về đơn đặt hàng đã hoàn thành, đơn giao hàng vẫn đang chuẩn bị và các hóa đơn chưa thanh toán.Những bài viết cần đọc trước khi cài odoo
Hóa đơn đã thanh toán với thông tin ngày thanh toán và tính năng trò chuyện.Những bài viết cần đọc trước khi cài odoo

Sau khi chúng tôi cấp quyền truy cập cổng thông tin khách hàng cho khách hàng của mình, odoo sẽ tạo một người dùng mới với loại Cổng thông tin . Để xem danh sách người dùng cổng thông tin khách hàng, hãy vào menu Cài đặt >> Người dùng & Công ty >> Người dùng , sau đó xóa bộ lọc Người dùng nội bộ.

Những bài viết cần đọc trước khi cài odoo

Bên cạnh việc có thể cấp quyền truy cập cổng thông tin khách hàng theo cách thủ công, chúng tôi cũng có thể định cấu hình để khách hàng có thể tự đăng ký. Vào menu Cài đặt , sau đó trên Cài đặt chung, đảm bảo rằng nút radio Đăng ký Miễn phí trên khối Tài khoản khách hàng đã được chọn, sau đó nhấp vào Lưu.

Những bài viết cần đọc trước khi cài odoo

Cách giải quyết lỗi “ProgrammingError: column does not exist” trong Odoo

Là một lập trình viên odoo, khi đang phát triển module hoặc addon, bạn đã bao giờ gặp phải điều gì đó khó chịu, chẳng hạn như sau khi làm mới trình duyệt, đột nhiên một thông báo Internal Server Error xuất hiện như bên dưới?

Những bài viết cần đọc trước khi cài odoo

Sau khi chúng tôi kiểm tra trong thiết bị đầu cuối hoặc tệp nhật ký, hóa ra là có thông báo lỗi ProgrammingError: column res_partner.max_order_item không tồn tại như hình dưới đây.

Những bài viết cần đọc trước khi cài odoo

Từ hình trên, có thể thấy rằng odoo cho chúng ta biết về cột hoặc trường max_order_item thực sự không tồn tại. Hmmm, nó thực sự không có ở đó? Đây, đây là ảnh chụp màn hình mã nguồn của tôi, rõ ràng có một trường tên là max_order_item .

Những bài viết cần đọc trước khi cài odoo

Nhưng tại sao odoo vẫn nghĩ rằng trường không tồn tại? Lạ lùng.

Thành thật mà nói, khi tôi bắt đầu sự nghiệp của mình với tư cách là một lập trình viên odoo, tôi đã coi lỗi này là lỗi khó chịu nhất. Vì không phải lúc nào lỗi này cũng xảy ra nên rất khó xác định nguyên nhân. Ví dụ trên máy tính của tôi không có lỗi, nhưng khi chúng tôi thử nó trên máy tính của người kiểm tra thì một lỗi xuất hiện. Hoặc trên máy tính của tôi và máy tính của người kiểm tra không có lỗi, nhưng khi chúng tôi tải mô-đun lên máy chủ của khách hàng thì lại xuất hiện lỗi.

Trước đây, tôi đã phải mất vài ngày để điều tra những lỗi này và tìm cách giải quyết chúng. Tạ ơn Chúa, cuối cùng nó cũng đơm hoa kết trái

Nó chỉ ra rằng lỗi này chỉ xảy ra nếu chúng ta thêm một lĩnh vực mới cho một mô hình nào đó – như xa như tôi biết điều đó chỉ xảy ra trong res.users và res.partner mô hình – trong khi mô-đun hoặc addon nơi chúng tôi thêm lĩnh vực mới này có đã được cài đặt, sau đó chúng tôi khởi động lại dịch vụ odoo và làm mới trình duyệt.

Trong trường hợp nghiên cứu, giả sử chúng ta tạo một mô-đun hoặc bổ trợ mới với tên là tutorial_field_not_found với một mô hình kế thừa mô hình res.partner như bên dưới.
# -*- coding: utf-8 -*-
 
from odoo import api, fields, models, _
 
class Partner(models.Model):
    _inherit = 'res.partner'
 
    sales_limit = fields.Float(string='Sales Amount Limit')

Vì mô-đun tutorial_field_not_found là một mô-đun mới, nên tất nhiên chúng ta phải khởi động lại dịch vụ odoo và cài đặt nó. Không có vấn đề gì cho đến khi ở đây.

Sau đó, thêm một trường mới như mã bên dưới, sau khi cài đặt mô-đun hoặc phần bổ trợ.

# -*- coding: utf-8 -*-
 
from odoo import api, fields, models, _
 
class Partner(models.Model):
    _inherit = 'res.partner'
 
    sales_limit = fields.Float(string='Sales Amount Limit')
    # max_order_item field was added after the module has been installed
    max_order_item = fields.Float(string='Maximum Item in One Order')

Khởi động lại dịch vụ odoo, sau đó làm mới trình duyệt của bạn. Tôi có thể chắc chắn rằng thông báo Lỗi máy chủ nội bộ như trong hình ảnh đầu tiên ở trên sẽ xuất hiện.

Nếu chúng tôi thay đổi các bước như trước khi thêm trường mới – trong trường hợp này là trường max_order_item – chúng tôi thực hiện hành động gỡ cài đặt trên mô-đun hướng dẫn_field_not_found , thì sau khi thêm các trường mới, chúng tôi cài đặt lại mô-đun, lỗi này sẽ không xuất hiện. Nhưng phương pháp này chắc chắn không thể được thực hiện trong cơ sở dữ liệu sản xuất, vì dữ liệu hiện có sẽ bị mất.

Hành động an toàn nhất mà chúng tôi có thể làm là thay đổi trạng thái của mô hình ir.module.module thành được gỡ cài đặt bằng lệnh SQL, thông qua thiết bị đầu cuối hoặc qua ứng dụng PGAdmin, trong cơ sở dữ liệu mà thông báo lỗi xuất hiện. Đây là cách làm.

-- change the state of the tutorial_field_not_found module to be uninstalled
-- so if we restarted the odoo service, this module will not be read by odoo
-- then the error will not occur
update ir_module_module set state = 'uninstalled' where name = 'tutorial_field_not_found';

Sau khi trạng thái của mô-đun tutorial_field_not_found được gỡ cài đặt , hãy khởi động lại dịch vụ odoo, làm mới trình duyệt, sau đó vào menu Ứng dụng và tìm mô-đun.

Những bài viết cần đọc trước khi cài odoo

Từ hình trên, chúng ta có thể thấy rằng mô-đun tutorial_field_not_found chưa được cài đặt. Không sao đâu. Nhấp vào nút Cài đặt để cài đặt lại mô-đun.

Với cách này chúng ta có thể giải quyết cột không tồn tại lỗi một cách an toàn hơn. Đó là một chút phức tạp, nhưng may mắn thay không phải tất cả các mô hình sẽ gây ra lỗi này nếu chúng ta thêm một lĩnh vực mới để mô hình đó, như xa như tôi biết lỗi này chỉ xảy ra trong res.users và res.partner mô hình duy nhất.

Cách khác để giải quyết lỗi này, chúng ta có thể nâng cấp mô-đun thông qua dòng lệnh, không cần thay đổi trạng thái của mô hình ir.module.module .

https://en.ngasturi.id/2021/01/15/how-to-solve-the-programmingerror-column-does-not-exist-error-in-odoo/

Sao lưu và khôi phục cơ sở dữ liệu lớn trên Odoo

Odoo có chức năng sao lưu và khôi phục cơ sở dữ liệu khá dễ sử dụng. Trước đây tôi không gặp vấn đề gì với công việc sao lưu và khôi phục cơ sở dữ liệu. Trước khi điều này đến. Một dự án có cơ sở dữ liệu rất lớn với kích thước hơn 3 GB và vẫn đang tiếp tục phát triển. Lần cuối tôi kiểm tra kích thước cơ sở dữ liệu là hơn 6 GB.

Tôi định sao lưu cơ sở dữ liệu từ máy chủ A lớn và khôi phục lại máy chủ B. Tôi không biết nguyên nhân là do internet của tôi chậm hay máy chủ cấu hình không đúng. Quá trình sao lưu thường bị lỗi giữa chừng. Hoặc nó hoạt động nhưng không thể khôi phục kết quả sao lưu trên máy chủ B.

Cuối cùng, tôi đã phải sửa đổi một chút chức năng sao lưu và khôi phục của odoo, và cảm ơn Chúa là nó đã hoạt động. Đây là những gì tôi đã làm. Có thể hữu ích cho bạn.

Quy trình sao lưu

Trước khi bắt đầu, vui lòng xem lộ trình hoặc bộ điều khiển mặc định của chức năng sao lưu trong tệp /web/controllers/main.py bên dưới.

@http.route('/web/database/backup', type='http', auth="none", methods=['POST'], csrf=False)
def backup(self, master_pwd, name, backup_format = 'zip'):
    try:
        odoo.service.db.check_super(master_pwd)
        ts = datetime.datetime.utcnow().strftime("%Y-%m-%d_%H-%M-%S")
        filename = "%s_%s.%s" % (name, ts, backup_format)
        headers = [
            ('Content-Type', 'application/octet-stream; charset=binary'),
            ('Content-Disposition', content_disposition(filename)),
        ]
        dump_stream = odoo.service.db.dump_db(name, None, backup_format)
        response = werkzeug.wrappers.Response(dump_stream, headers=headers, direct_passthrough=True)
        return response
    except Exception as e:
        _logger.exception('Database.backup')
        error = "Database backup error: %s" % (str(e) or repr(e))
        return self._render_template(error=error)

Từ tuyến đường hoặc bộ điều khiển ở trên, tôi sao chép nó và thực hiện một thay đổi nhỏ, vì vậy phương pháp được chấp nhận là GET thay vì POST . Tôi hy vọng, tôi có thể sử dụng lệnh wget từ máy chủ B, vì vậy tôi có thể sao lưu cơ sở dữ liệu tồn tại trong máy chủ A trực tiếp từ máy chủ B và lưu kết quả trực tiếp trong máy chủ B mà không cần sử dụng giao diện người dùng sao lưu và khôi phục mặc định của odoo, vì vậy Tôi không cần lưu kết quả sao lưu trong máy tính của mình và tải nó lên máy chủ B. Đây là tuyến đường hoặc bộ điều khiển mà tôi đã thêm.

@http.route('/web/database/backup-custom', type='http', auth="none", methods=['GET'], csrf=False)
def backup_custom(self, master_pwd, name, backup_format = 'zip'):
    try:
        odoo.service.db.check_super(master_pwd)
        ts = datetime.datetime.utcnow().strftime("%Y-%m-%d_%H-%M-%S")
        filename = "%s_%s.%s" % (name, ts, backup_format)
        headers = [
            ('Content-Type', 'application/octet-stream; charset=binary'),
            ('Content-Disposition', content_disposition(filename)),
        ]
        dump_stream = odoo.service.db.dump_db(name, None, backup_format)
        response = werkzeug.wrappers.Response(dump_stream, headers=headers, direct_passthrough=True)
        return response
    except Exception as e:
        _logger.exception('Database.backup')
        error = "Database backup error: %s" % (str(e) or repr(e))
        return self._render_template(error=error)

Sau khi tôi thêm mã ở trên vào máy chủ A, ngay lập tức tôi khởi động lại dịch vụ odoo. Sau đó, trên máy chủ B thông qua ssh, tôi nhập thư mục / home / ubuntu / backup mà tôi muốn lưu kết quả sao lưu từ máy chủ A. Bạn có thể chọn một thư mục khác nếu muốn. Sau đó chạy lệnh này trên thiết bị đầu cuối B của máy chủ.

wget -O test.zip "http://33.33.33.33:8069/web/database/backup-custom?master_pwd=admin&name=test&backup_format=zip"

Ý nghĩa của đoạn mã trên là sao lưu cơ sở dữ liệu có tên là “test” trên máy chủ A (IP 33.33.33.33) và lưu nó dưới dạng tệp “test.zip” trên máy chủ B. Giả sử mật khẩu chính của odoo trên máy chủ A là “quản trị viên” và có định dạng sao lưu zip. Sau khi quá trình hoàn tất, tệp sao lưu sẽ được lưu trong /home/ubuntu/bakcup/test.zip trên máy chủ B.

Nếu kích thước cơ sở dữ liệu lớn hơn một chút nên mất nhiều thời gian hơn và gây ra lỗi wget timeout, thường thì tôi thêm tùy chọn timeout trong lệnh wget và thực hiện lệnh sao lưu trong máy chủ A thay vì máy chủ B. Sau khi quá trình sao lưu kết thúc. , Tôi gửi kết quả sao lưu đến máy chủ B bằng lệnh sftp . Đây là cách tôi thực hiện quá trình sao lưu trong máy chủ A với tùy chọn thời gian chờ.

wget -T 10800 -O test.zip "http://127.0.0.1:8069/web/database/backup-custom?master_pwd=admin&name=test&backup_format=zip"

Với tùy chọn -T 10800 ở trên, wget sẽ tăng lỗi thời gian chờ sau 3 giờ. Bạn có thể thay đổi giá trị trong vài giây.

Quá trình khôi phục

Vui lòng xem tuyến đường mặc định của odoo hoặc bộ điều khiển chức năng khôi phục bên dưới

@http.route('/web/database/restore', type='http', auth="none", methods=['POST'], csrf=False)
def restore(self, master_pwd, backup_file, name, copy=False):
    try:
        data_file = None
        db.check_super(master_pwd)
        with tempfile.NamedTemporaryFile(delete=False) as data_file:
            backup_file.save(data_file)
        db.restore_db(name, data_file.name, str2bool(copy))
        return http.local_redirect('/web/database/manager')
    except Exception as e:
        error = "Database restore error: %s" % (str(e) or repr(e))
        return self._render_template(error=error)
    finally:
        if data_file:
            os.unlink(data_file.name)

Từ đoạn mã trên, chúng ta có thể thấy rằng phương thức được hàm khôi phục chấp nhận là một ĐĂNG . Và backup_file mà chúng tôi gửi qua giao diện người dùng sẽ được lưu dưới dạng tệp tạm thời và sẽ bị xóa khi quá trình khôi phục hoàn tất. Đây là chức năng khôi phục mới mà tôi Thêm trên máy chủ B.

@http.route('/web/database/restore-custom', type='http', auth="none", methods=['GET'], csrf=False)
def restore_custom(self, master_pwd, backup_file, name, copy=False):
    try:
        data_file = None
        db.check_super(master_pwd)
        db.restore_db(name, backup_file, str2bool(copy))
        return http.local_redirect('/web/database/manager')
    except Exception as e:
        error = "Database restore error: %s" % (str(e) or repr(e))
        return self._render_template(error=error)
    finally:
        if data_file:
            os.unlink(data_file.name)

Từ chức năng khôi phục bổ sung ở trên, chúng tôi không cần gửi tệp sao lưu đến máy chủ B và cũng không cần lưu nó dưới dạng tệp tạm thời vì tệp đã có trên máy chủ B. Hãy nhớ rằng chúng tôi đã sao lưu cơ sở dữ liệu từ máy chủ A và lưu trữ nó trong thư mục / home / ubuntu / backup . Chúng ta chỉ cần cung cấp tham số backup_file với đường dẫn đầy đủ của tệp sao lưu đã nén trên máy chủ B, ví dụ /home/ubuntu/backup/test.zip . Sau đó, sau khi khởi động lại dịch vụ odoo trên máy chủ B, tôi chạy lệnh sau để bắt đầu quá trình khôi phục.

wget "http://44.44.44.44:8069/web/database/restore-custom?master_pwd=admin&backup_file=%2Fhome%2Fubuntu%2Fbackup%2Ftest.zip&name=test_restore& copy=true"

Ý nghĩa của đoạn mã trên là khôi phục tệp /home/ubuntu/backup/test.zip trên máy chủ B (IP 44.44.44.44) thành một cơ sở dữ liệu mới với tên test_restore .

Sau khi quá trình hoàn tất, một cơ sở dữ liệu mới với tên test_restore sẽ xuất hiện trên cài đặt máy chủ B odoo. Đây là cách tôi sao lưu và khôi phục cơ sở dữ liệu lớn trên odoo.

https://en.ngasturi.id/2020/12/05/how-i-backup-and-restore-large-database-on-odoo/

Dùng thư viện sao lưu và khôi phục cơ sở dữ liệu Odoo lớn

Trong bài viết trước, tôi đã thảo luận về cách sao lưu và khôi phục cơ sở dữ liệu odoo lớn, bằng cách sửa đổi bộ điều khiển odoo. Sau một thời gian sử dụng phương pháp này trong một số dự án, nó chỉ ra rằng phương pháp này có điểm yếu. Đôi khi không thể khôi phục tệp sao lưu. Tệp sao lưu dường như bị hỏng, vì vậy nó không thành công khi chúng tôi khôi phục nó trên một máy chủ khác. Tôi vẫn không biết những gì gây ra vấn đề này.
Để sử dụng thư viện trên, trước tiên chúng ta phải cài đặt nó.
sudo pip3 install click-odoo-contrib
Quan trọng!!!
Tùy thuộc vào cách bạn cài đặt odoo, bạn có thể không sử dụng được thư viện này trên máy chủ của mình. Theo như tôi biết, nếu chúng ta cài đặt odoo bằng tệp .deb thì thư viện này có thể được sử dụng trơn tru. Nhưng nếu chúng ta cài đặt odoo bằng Yenthe666 / InstallScript thì không thể sử dụng thư viện này. Kết luận của tôi cho đến nay là, nếu các tệp và thư mục odoo nằm trong thư mục thư viện python (/ usr / lib / python3 / dist-pack) thì thư viện này có thể được sử dụng, nếu không thì không. Tôi chưa thử thư viện này trên bất kỳ phương pháp cài đặt odoo nào khác, ngoài 2 phương pháp trên.
Để sao lưu cơ sở dữ liệu, chúng ta có thể sử dụng lệnh như trong tài liệu thư viện trên github. Nhưng tôi không khuyên bạn nên sao lưu cơ sở dữ liệu ở định dạng zip.
Bởi vì sau khi tôi thử nó, quá trình này diễn ra khá lâu. Theo kinh nghiệm của tôi, khi tôi sao lưu cơ sở dữ liệu với kích thước 1,2GB và sử dụng định dạng zip, quá trình này vẫn chưa kết thúc sau hơn 3 giờ đồng hồ. Trong khi đó, nếu tôi thay đổi định dạng thư mục thì quá trình sao lưu có thể hoàn tất trong vòng 1 giờ 30 phút.
Đây là lệnh cách sao lưu cơ sở dữ liệu với tên my_database để được lưu dưới dạng thư mục mới với tên my_database_backup trong thư mục / home / ngasturi / Documents giả sử tệp cấu hình odoo nằm trong / etc / odoo / odoo.conf
click-odoo-backupdb -c /etc/odoo/odoo.conf –format folder my_database /home/ngasturi/Documents/my_database_backup
Đây là lệnh cách khôi phục thư mục sao lưu ở trên thành cơ sở dữ liệu mới với tên my_restored_database.
click-odoo-restoredb -c /etc/odoo/odoo.conf my_restored_database /home/ngasturi/Documents/my_database_backup
Thật không may, khi chúng tôi khôi phục thư mục sao lưu, nội dung của nó, thư mục my_database_backup sẽ bị di chuyển (cắt) đến vị trí odoo my_database_backup vì vậy chúng tôi không thể thực hiện quá trình khôi phục lại lần thứ hai. Do đó, trước khi bạn thực hiện quá trình khôi phục, tôi khuyên bạn nên sao lưu thư mục.
Tôi đã cố gắng nén thư mục sao lưu thành tệp .zip nhưng kết quả là không thể khôi phục được. Nội dung của kết quả sao lưu với định dạng thư mục khác với nội dung của kết quả sao lưu với định dạng zip. Đó là đánh giá và kinh nghiệm của tôi về thư viện này. Cho đến nay tôi vẫn đang thử nghiệm thư viện này và vẫn chưa sử dụng nó nhiều trong các dự án mà tôi đang làm, vì vậy tôi vẫn không chắc liệu thư viện này có thể giải quyết vấn đề trong phương pháp đầu tiên hay không.
https://en.ngasturi.id/2021/08/21/a-library-for-backup-and-restore-big-odoo-database/

Trả lời

Email của bạn sẽ không được hiển thị công khai.