2016-01-05 30 views
14

Tôi có một số mô-đun mở rộng các tiện ích bổ sung của Odoo. Ví dụ, các mô hình trong my_module mà mở rộng crm:Rất tiếc. Di chuyển

class Lead(models.Model): 
    _inherit = 'crm.lead' 
    # exmaple fields 
    field_1 = fields.Char(...) 
    field_2 = fields.Many2one(...) 
    # ... field 99 


class Stage(models.Model): 
    _inherit = 'crm.stage' 
    # exmaple fields 
    field_1 = fields.Char(...) 
    field_2 = fields.Many2one(...) 
    # ... field 99 

Tình hình tương tự là dành cho module đó mở rộng giờ, sản phẩm, vv tôi cần phải thực hiện một số thay đổi đối với các mô hình. Ví dụ: my_module_1 Tôi cần thay đổi một vài trường (loại, quan hệ), trong my_module_2 chỉ để xóa một vài trường, v.v. Tất nhiên tôi cũng cần thay đổi chế độ xem của mỗi mô-đun. Và tất nhiên tôi có các mô hình tùy chỉnh của tôi có phụ thuộc với các mô hình từ các ứng dụng/mô-đun khác nhau. Nhưng tôi có dữ liệu về sản xuất phải được lưu trữ. Tôi không tìm thấy bất kỳ thông tin nào về việc di chuyển (hoặc đồng bộ hóa các mô-đun) trong Odoo.

Câu hỏi của tôi là: Cách tốt nhất để cập nhật mô-đun/ứng dụng vào sản xuất (nếu chúng ta có nhiều thay đổi trong các trường của mô hình và chế độ xem) là gì? Cảm ơn trước.

Trả lời

0

Trước tiên, bạn phải đổ cơ sở dữ liệu sản xuất và sau đó khôi phục cơ sở dữ liệu đó trong hệ thống cục bộ của mình.

Sau khi được khôi phục trong hệ thống cục bộ, hãy phát triển các mô-đun tùy chỉnh của bạn để mở rộng các tính năng mô hình hiện có.

Cài đặt các mô-đun đã phát triển trong hệ thống cục bộ (cơ sở dữ liệu đã khôi phục) và xem các thay đổi bạn đã thực hiện. Nếu tất cả mọi thứ là hoàn hảo với dữ liệu hiện có, sau đó cài đặt mô-đun đó trong cơ sở dữ liệu sản xuất.

Để đổ cơ sở dữ liệu sản xuất, hãy thực hiện lệnh dưới đây ở bưu cục. Lệnh: pg_dump dbname> outfile Ví dụ: pg_dump prod_db> prod_db.sql

Trước khi khôi phục cơ sở dữ liệu, bạn phải tạo cơ sở dữ liệu mới trong hệ thống cục bộ của mình. Để tạo cơ sở dữ liệu tươi thực hiện lệnh dưới đây, lệnh: createdb --owner OWNER_NAME --encoding utf-8 dbname Ví dụ: createdb --owner odoo --encoding utf-8 prod_db

Để khôi phục lại cơ sở dữ liệu sản xuất thực hiện dưới đây lệnh trong postgres. Command: psql dbname < infile đường Ví dụ: pg_dump prod_db> prod_db.sql

+0

Tôi không gặp vấn đề gì với Postgres hoặc Dumps. Tôi sẽ cố gắng giải thích ... Về sản xuất đã được cài đặt một số mô-đun. Tôi đã thay đổi một số trường trong mô hình. Để xem các thay đổi trong các mô hình cần phải khởi động lại 'openerp-server'. Nhưng máy chủ sẽ không bắt đầu, bởi vì cấu trúc của các bảng và các mô hình là khác nhau. Nếu chúng ta nhấn vào nút 'uninstall' -> triển khai các mô hình đến máy chủ -> bấm vào' install' tất cả sẽ ổn, nhưng trong trường hợp này chúng ta mất tất cả dữ liệu. Vì vậy, tôi muốn biết nó có thể tạo ra một số ** kịch bản di chuyển ** và sử dụng chúng khi chúng ta nhấn ** update module ** hoặc trước 'start server'. –

+0

Bạn đã thay đổi trường dữ liệu trong mô hình của trường hiện có hoặc thêm trường mới trong mô hình? –

+0

Tôi chỉ đang tìm cách cập nhật mô-đun nhanh chóng và dễ dàng. Tôi không thể tin rằng không có công cụ để tạo ra sự di trú dựa trên sự khác biệt giữa các mô hình/bảng Odoo. –

0

Có thể có một số công cụ cho sự di cư trong Odoo phiên bản doanh nghiệp, nhưng tôi đã không tìm thấy bất kỳ thông tin về việc này. Vì vậy, giải pháp mà tôi sử dụng là làm mọi thứ theo cách thủ công. Từng bước, chăm chú. Nếu bạn biết một cách tốt hơn hãy cho tôi biết.

Ví dụ: Nếu chúng tôi cần xóa một số trường:

  1. Xóa trường khỏi mô hình và chế độ xem trong mô-đun/ứng dụng của bạn.
  2. Dừng openerp-server. Chạy sql mà thả cột của chúng tôi.
  3. Triển khai mô hình phiên bản mới và chế độ xem cho máy chủ. Khởi động openerp-server.
  4. chế độ nhà phát triển Kích hoạt -> Chuyển tới cài đặt -> tìm bạn mô-đun/app -> bấm Update (Nâng cấp)

Nếu bạn cần thay đổi kiểu/mối quan hệ của các lĩnh vực:

  1. Thêm một trường (với kiểu/quan hệ mới) vào mô hình của bạn.
  2. Chuẩn bị tập lệnh sql sẽ chuyển dữ liệu từ cột cũ sang cột/bảng mới.
  3. Xóa trường cũ khỏi mô hình và chế độ xem của bạn.
  4. Dừng openerp-server. Chạy tập lệnh sql, thả các cột cũ.
  5. Triển khai mô hình phiên bản mới và chế độ xem cho máy chủ. Khởi động openerp-server.
  6. chế độ nhà phát triển Kích hoạt -> Chuyển tới cài đặt -> tìm bạn mô-đun/app -> bấm Update (Nâng cấp)

Hãy cẩn thận khi bạn thay đổi các mối quan hệ (one2many, many2many). Tạo các bãi và phiên bản ứng dụng. Kiểm tra sửa đổi của bạn trên máy địa phương với db từ sản xuất cho một vài lần.

Một điều nữa về các trường mới có quan hệ. Ví dụ: tôi có mô-đun_1 phụ thuộc vào crm. module_2 mà phụ thuộc vào module_1 vv Tôi cần thêm một số lĩnh vực để crm mô hình và hiển thị chúng trong module_1. Trong mô-đun_2 Tôi cần hiển thị các trường mới từ mô hình tùy chỉnh của mình trong mô-đun_1.

Chúng tôi có thể thêm tất cả các trường mới vào mô hình và chế độ xem trong mô-đun của chúng tôi. Ngừng máy chủ và chạy các máy chủ với các thông số --update như thế này:

./openerp-server --update=all 

Trong trường hợp này tất cả các mô-đun sẽ được cập nhật. Nếu chúng ta cần phải cập nhật chỉ các module mà phụ thuộc vào crm chúng ta cần chỉ để cập nhật crm:

./openerp-server --update=crm 
0

Khởi động lại máy chủ từ dòng lệnh một lần với các -u và cờ -d ví dụ.

sudo service odoo stop 
/path/to/odoo/odoo.py -d <your_db_name> -u custom_module1,custom_module2 

Nếu bạn đang xử lý một máy chủ sản xuất, tôi sẽ thử nghiệm cục bộ này trên máy phát triển của bạn với một phân đoạn sản xuất DB đảm bảo nó hoạt động, tinh chỉnh nó nếu cần thiết (ví dụ: một số trường có thể cần mặc định, bất cứ điều gì), kiểm tra nó một lần nữa trên một bãi chứa mới, cho đến khi tất cả những gì tôi cần làm là khởi động lại máy chủ như trên để thực hiện những thay đổi xảy ra. Khi điều đó xảy ra, hãy sao lưu cơ sở dữ liệu, kho dữ liệu và thậm chí các mô-đun bị ảnh hưởng trên máy chủ sản xuất, tải lên (các) mô-đun mới và khởi động lại máy chủ sản xuất như trên (không có cơ sở dữ liệu bán phá giá từ thử nghiệm đến sản xuất tại đây) chăm sóc thay đổi cơ sở dữ liệu.

Nếu bạn đang cố gắng thay đổi cấu trúc của bảng một cách đáng kể (ví dụ: thay đổi trường dữ liệu) và giữ lại dữ liệu trong bảng theo cách duy nhất tôi có thể nghĩ là thực hiện thêm trường MỚI đầu tiên với kiểu dữ liệu mới chúng với dữ liệu từ các trường cũ (hoặc trực tiếp với truy vấn postgres hoặc trong "mô-đun phiên bản tạm thời") và điều này thực sự phụ thuộc vào các thay đổi, thay đổi từ lựa chọn sang many2one liên quan đến việc chèn các giá trị lựa chọn vào một bảng mới, hai điều rất khác nhau từ điểm cơ sở dữ liệu xem kiểu trường thực tế trên bảng sẽ là số nguyên, ID từ hàng chứa giá trị lựa chọn trong bảng quan hệ ...

Khi các trường mới của bạn được điền, hãy tạo phiên bản cuối cùng của mô-đun xóa tất cả các trường mà bạn không còn cần (giữ phiên bản khác cho cơ sở dữ liệu sản xuất). Tôi có lẽ sẽ kiểm tra dân số cơ sở dữ liệu bằng tay trên máy chủ phát triển đầu tiên hoặc trong postgres hoặc với một số công cụ như pgadminIII, nhưng có kế hoạch tạo một kịch bản để thực hiện nó trên máy chủ sản xuất (hoặc tốt hơn là xây dựng tất cả phiên bản mô-đun) vì nó sẽ phải xuống trong khi điều đó xảy ra.

Tôi cũng sẽ xem bảng sau khi hoàn tất, một số trường vẫn có thể ở đó ngay cả khi mô-đun mới không sử dụng chúng.

Xin lỗi, tôi không biết về bất kỳ, cách tự động đơn giản hơn để làm việc đó, chỉ có quá nhiều biến ...

+0

nó giống như trong câu trả lời của tôi chỉ với tham số * -d * cho tên cơ sở dữ liệu. Nhưng tôi đang tìm cách dễ dàng để tạo di chuyển, chuyển dữ liệu, v.v. 'từ ô' –

0

Theo ví dụ của bạn, tôi tin rằng bạn đã biết làm thế nào để thêm một trường mới cho mô hình hiện có.

Tôi vẫn không hiểu tại sao bất kỳ ai muốn xóa trường khỏi mô hình hiện tại - đây sẽ là vấn đề lớn hơn giá trị (nếu có lý do hợp lệ, vui lòng cho tôi biết). Điều này cũng áp dụng khi cố gắng để recast loại trường. Với điều này đã nói, bạn có thể dễ dàng loại bỏ/thay thế/ẩn một trường hiện có trên một khung nhìn, trong đó về bản chất sẽ đạt được kết quả tương tự.

https://www.odoo.com/forum/help-1/question/add-remove-fields-to-inherited-custom-module-72945

<record model="ir.ui.view" id="enter_an_id_here"> 
    <field name="name">some.text.here.form</field> 
    <field name="model">crm.lead</field> 
    <field name="inherit_id" ref="crm.external_id_here" /> 
    <field name="arch" type="xml"> 
     <field name="name" position="after"> 
      <field name="your_field_name"/> 
     </field> 
    </field> 
</record> 

Bạn cũng nói về di chuyển dữ liệu từ những người phụ thuộc vào mô hình khác thông qua copy/paste. Điều này không nên được yêu cầu vì bạn chỉ có thể truy cập dữ liệu trong mô hình hiện có thông qua tham chiếu trực tiếp đối tượng/trường hoặc bằng cách sử dụng trường có liên quan.

related field on odoo?

new_field = fields.Char(string='String', related='product_id.name') 
or inside python 
value = self.product_id.name 

tôi sẽ không giải quyết bất cứ điều gì để làm với cài đặt/máy chủ lệnh bên mô-đun như câu trả lời khác ở đây đã đề cập đến những khía cạnh này.

+0

Ok. Tôi có 10-50 mô-đun tùy chỉnh. Một số cột không được sử dụng. Tất nhiên tôi chỉ có thể giấu nó (nhưng tôi nghĩ đó là cách sai). Điều gì về đổi tên, thay đổi các loại/quan hệ vv? Tôi có thể tạo các kịch bản sql bằng tay và thực hiện chúng. Điều gì về lịch sử, giao dịch? Tôi nên dừng máy chủ theo cách thủ công, thực thi tập lệnh, cập nhật nguồn, cập nhật mô-đun và chạy máy chủ? Điều gì xảy ra nếu có vấn đề với việc nâng cấp mô-đun? Nó không phải là cách hiện đại. –

+0

Theo như tôi biết bạn không thể đổi tên các trường trên các mô hình hiện có. Khi bạn nhập một tên khác, nó sẽ thực sự tạo một trường mới. Nếu bạn đã đổi tên một trường thì nó sẽ loại bỏ trường cũ khỏi mô hình, nhưng không loại bỏ khỏi cơ sở dữ liệu. Điều này có nghĩa là mô hình sẽ có trường mới và DB sẽ có cả hai. Nếu bạn loại bỏ một trường khỏi một mô hình, thì bạn cũng phải loại bỏ trường khỏi tất cả các khung nhìn, và cũng loại bỏ bất kỳ trường nào trên các mô hình khác được gọi là trường gốc mà bạn đã loại bỏ. Điều này cũng có thể ảnh hưởng đến bất kỳ mô-đun nào bạn cài đặt sau này sử dụng trường bạn đã xóa. – Palza

+0

Đối với các tập lệnh vv - Bạn có thể chạy các tập lệnh SQL bất kỳ lúc nào, thời gian ưa thích của bạn thường phụ thuộc vào những gì bạn đang cố gắng thực hiện. Hãy tự hỏi tại sao bạn muốn odoo lên hoặc xuống trong những thời gian khi các kịch bản được chạy. – Palza

Các vấn đề liên quan