本章主要介绍肖odoo实例添加用户自定义的模块。你可以从多个路径载入模块。但是建议你将自己的模块儿放在特定的目录当中,避免与odoo的核心模块混淆。

在这一章节,中我们主要涉及以下内容:

  • 配置插件路径。
  • 标准化实例目录结构。
  • 安装和更新本地模块。
  • 从github安装模块。
  • 生效模块的改变。
  • 应用和尝试拉起最新请求。

术语

我们使用的add-on(插件)或者module(模块)或者app(应用)或者add-on module(插件模块)指的是安装在odoo中,由odoo调用并完成特定业务的单元。类似于python中的包。

配置add-ons路径

在odoo.conf中,我们很方便的配置模块路径,当数据库初始化的时候,odoo将查找这些路径下的模块。

准备

  • odoo.conf
  • odoo实例

步骤

  1. 编辑配置文件,odoo.conf
  2. 定位配置文件中的路径参数

addons_path=默认路径

  1. 修改路径

addons_path=路径1, 路径2

  1. 重启应用实例
  1. $ ./odoo-bin -c odoo.conf

原理

重启Odoo时,读取配置文件。addons_path变量的值应该是用逗号分隔的目录列表。可以接受相对路径,但它们是相对于当前工作目录的,因此应该避免在配置文件中使用。

小贴士

若odoo的实例启动后,添加了新的模块,那么需要点击UI上的 更新 。参见“更新模块列表”那一章节的内容

更多

当您第一次调用odoo-bin脚本来初始化一个新的数据库时,您可以传递——addons-path命令行参数,并用逗号分隔目录列表。这将初始化可用的附加组件模块列表以及在提供的附加组件路径中找到的所有附加组件。当你这样做的时候,你必须显式包含基本的附加组件目录(odoo/odoo/addons),以及核心的附加组件目录(odoo/addons)。与前面的配方稍有不同的是,本地add-ons不能为空;它们必须包含至少一个子目录,该目录具有附加模块的最小结构。


规范化实例目录布局

在开发中,最好保持生产及开发环境相同。绝对可以让你少踩坑。

步骤

  1. 创建新目录
  1. $ mkdir ~/odoo-dev/projectname
  2. $ cd ~/odoo-dev/projectname
  1. 创建python的虚拟环境
  1. $ python3 -m venv env
  1. 创建一些子目录
  1. $ mkdir src local bin filestore logs
  • src/: 这个目录包含odoo以及其他第三方的代码。
  • local/:这里包含我们开发的模块。
  • bin/: 这里包含一些执行脚本。
  • fielstore/: 这是用于文件存储的。
  • logs:/这是用于存储服务日志的。
  1. clone odoo及安装必要的包
  1. $ git clone -b 14.0 --single-branch --depth 1 https:// github.com/odoo/odoo.git src/odoo
  2. $ env/bin/pip3 install -r src/odoo/requirements.txt
  1. 将如下代码写入 bin/odoo文件:
  1. #!/bin/sh ROOT=$(dirname $0)/..
  2. PYTHON=$ROOT/env/bin/python3 ODOO=$ROOT/src/odoo/odoo-bin
  3. $PYTHON $ODOO -c $ROOT/projectname.cfg "$@" exit $?
  1. 授予可执行权限:
  1. $ chmod +x bin/odoo
  1. 创建空的本地模块:
  1. $ mkdir -p local/dummy
  2. $ touch local/dummy/ init .py
  3. $ echo '{"name": "dummy", "installable": False}' >\ local/dummy/ manifest .py
  1. 生成配置文件:
  1. $ bin/odoo --stop-after-init --save \
  2. --addons-path src/odoo/odoo/addons,src/odoo/addons,local \
  3. --data-dir filestore
  1. 添加.gitignore文件
  1. # dotfiles, with exceptions:
  2. .*
  3. !.gitignore
  4. # python compiled files
  5. *.py[co]
  6. # emacs backup files
  7. *~
  8. # not tracked subdirectories
  9. /env/
  10. /src/
  11. /filestore/
  12. /logs/
  1. 初始化git库
  1. $ git init
  2. $ git add .
  3. $ git commit -m "initial version of projectname"

原理

我们组织了一个干净的目录,并为其分配给不同的角色。

  • 其他人的代码(src/)
  • 本地模块代码(local/)
  • 实例的存储的文件(filestore/)

    为每一个项目创建虚拟环境可避免项目依赖间的干扰。

    我们为每一个项目创建单独的odoo的副本及第三方的模块,可有效避免很多坑。

    bin/odoo脚本可以方便我们,省的记住各种路径及激活虚拟环境。脚本可以根据自己的实际情况自行调整。以上可以生成odoo的配置文件。

安装和更新本地模块

odoo的核心就是各式各样的模块,有odoo官方的,有第三方的。

在这一章节中,我们将学习如何通过web页面或者命令行安装和升级模块。

通过命令行操作的优势在于可以一次性操作多个模块,且在操作的过程中,可实时看到日志信息。

准备

可用的odoo实例

步骤

通过页面

  1. 使用Administrator账户登录并进入Apps菜单

  2. 搜索目标模块

  3. 点击 install 按钮即可。

    注意,有时odoo包需要额外的python包。但是相关依赖还没有安装,那么将会有如下报错。

    通过pip安装即可。

    更新模块方法类似,不详细列了。

    通过命令行

  4. 确定模块的名称,就是写在__manifest__.py文件中的key为name的名称。

  5. 停用实例。

  6. 如下命令

  1. $ odoo/odoo-bin -c instance.cfg -d dbname -i addon1,addon2 \
  2. --stop-after-init
  1. 重启实例。

    更新模块方法类似,通过如下命令
  1. $ odoo/odoo-bin -c instance.cfg -d dbname -u addon1 \
  2. --stop-after-init

原理

安装和更新是非常相近的过程,但是却有一些比较重要的区别。

模块安装

当我们在安装模块时,odoo会检查尚未安装的模块列表。odoo还会检查模块所依赖的模块,如果有的话,odoo会递归的安装这些模块。

安装步骤如下:

  1. 如果有的话,运行preinit hook函数。
  2. 载入模块信息并更新表结构。
  3. 载入数据文件并更新数据库中的内容。
  4. 安装模块的演示数据(如果配置了演示数据)
  5. 如果有的话,运行postinit hook函数。
  6. 运行视图的检查。
  7. 如有激活了演示数据,并且test=enable,那么将运行模块的tests。
  8. 更新模块的状态。
  9. 更新模块的翻译信息。

小贴士

preinit和postinit钩子函数定义在__manifest__.py文件中,使用pre_init_hook和post_init_hook的key。value为函数名。详情见第三章,创建odoo模块章节。

模块更新

当我们更新模块时,odoo将检查已安装的列表。odoo将检查这些模块的反向依赖。如有的话,也将更新这些模块。

更新步骤如下:

  1. 运行模块的pre-migration(详见第六章,管理模型数据)
  2. 载入模块信息并更新表结构。
  3. 载入数据文件并更新数据库中的内容。
  4. 安装模块的演示数据(如果配置了演示数据)
  5. 如果配置了迁移函数,那么将运行模块的post-migration。
  6. 运行视图的检查。
  7. 如有激活了演示数据,并且test=enable,那么将运行模块的tests(第十八章,自动测试)
  8. 更新模块的状态。
  9. 更新模块的翻译信息。

小贴士

更新未安装的模块将会忽略。但是安装已安装过的模块,将可能导致潜在的坑。比如,有些数据在使用中进行了调整,但是在再次安装的时候,可能就会被还原。但是通过web页面就没有这个风险了。

更多

小心处理依赖关系的模块。A依赖于B,若B更新,则A也会更新。但是若A更新,B是不会更新的。

从github安装模块

  1. git clone 下来
  2. 配置odoo.cnf中的addons-path
  3. 执行安装即可

更新模块的修改

准备

假设我们已经安装了github的partner_contact_gender,我们收到该模块在odoo14.0版本下的问题修复。

步骤

为了应用来自github的更新,操作如下

  1. 使用使用该模块的实例
  2. 备份实例(详见第一章中的管理数据库章节)
  3. 进入partner-contact模块所在目录
  4. 添加本地tag,以方便进行回退
  1. $ git checkout 14.0
  2. $ git tag 14.0-before-update-$(date --iso)
  1. 拉取最新的代码
  1. $ git pull --ff-only
  1. 更新模块
  2. 重启实例

原理

通常模块开发者发布最新版的模块,包含bug修复及新功能。在这,我们获取到一个新版本并更新。

如果git pull --ff-only失败,则可以回退到上一个版本。

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

然后,你可以通过git pull(去掉--ff-only),如果有合并冲突,说明你本地修改了部门内容。

Applying and trying proposed pull requests

【odoo14】第二章、管理odoo实例的更多相关文章

  1. 【Odoo 8开发教程】第二章:Odoo生产环境部署设置

    转载请注明原文地址:https://www.cnblogs.com/cnodoo/p/10792977.html 一:dbfilter 数据库访问规则设置 一个odoo实例可以连接到不同的数据库实例中 ...

  2. 第二章 Odoo 12开发之开发环境准备

    在更深入了解 Odoo 开发之前,我们应配置好开发环境并学习相关的基础管理任务.本文中,我们将学习创建 Odoo 应用所需用到的工具和环境配置.这里采用 Ubuntu 系统来作为开发服务器实例的主机, ...

  3. HttpClient学习研究---第二章:连接管理

    第二章.Connection management连接管理2.1. 2.1.Connection persistence连接持久性The process of establishing a conne ...

  4. CISA 信息系统审计知识点 [第二章. IT治理和管理 ]

    第二章.  IT治理和管理 1.  IT治理.管理.安全和控制框架及标准.指南和实践 IT治理是董事会和执行管理层的职责. IT治理的关键因素:保持与业务的战略一致,引导业务价值的实现. IT治理关注 ...

  5. Java 线程第三版 第一章Thread导论、 第二章Thread的创建与管理读书笔记

    第一章 Thread导论 为何要用Thread ? 非堵塞I/O      I/O多路技术      轮询(polling)      信号 警告(Alarm)和定时器(Timer) 独立的任务(Ta ...

  6. Java 螺纹第三版 第一章Thread介绍、 第二章Thread创建和管理学习笔记

    第一章 Thread导论 为何要用Thread ? 非堵塞I/O      I/O多路技术      轮询(polling)      信号 警告(Alarm)和定时器(Timer) 独立的任务(Ta ...

  7. 第二章--MYSQL体系结构和管理

    体系结构 MySQL C/S模型 Server : mysqld Client : socket:仅本地连接使用 tcp/ip:应用连接使用(远程和本地) #TCP/IP方式(远程.本地) mysql ...

  8. 《Django By Example》第二章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:翻译完第一章后,发现翻译第二章的速 ...

  9. Jenkins入门系列之——02第二章 Jenkins安装与配置

    2014-12-08:已不再担任SCM和CI的职位,Jenkins的文章如无必要不会再维护. 写的我想吐血,累死了. 网页看着不爽的,自己去下载PDF.有问题请留言! Jenkins入门系列之——03 ...

随机推荐

  1. k8s-1-交付dubbo微服务

    一.Dubbo微服务概述 1.1: dubbo介绍 1.2: 部署内容 二.实验环境架构 2.1: 架构 1.1 架构图解 1.最上面一排为K8S集群外服务 1.1 代码仓库使用基于git的gitee ...

  2. Java RMI 实现一个简单的GFS(谷歌文件系统)——背景与设计篇

    目录 背景 系统设计 1. 系统功能 2. Master组件 2.1 命名空间 2.2 心跳机制 2.3 故障恢复和容错机制 3. ChunkServer组件 3.1 本地存储 3.2 内存命中机制 ...

  3. C++ 指针 new delete int*与string

    一 指针 string和int 都可以认为是四个字节sizeof(string)==4, string是个类,它的空间在堆动态分配 二.delete 只是释放空间 三.new 数组 int size= ...

  4. IDEA 安装常用操作二

    一.IDEA启动慢,因为启动时编译.缓存.创建索引等,如果断电等启动异常,可以让缓存索引失效 迁移IDEAD时,可以找到config.system等文件夹, 随着时间使用越久,空间占用越大,另外觉得浪 ...

  5. js Promise finally All In One

    js Promise finally All In One finally let isLoading = true; fetch(myRequest).then(function(response) ...

  6. React Hooks vs React Class vs React Function All In One

    React Hooks vs React Class vs React Function All In One React Component Types React Hooks Component ...

  7. macOS 录屏 gif

    macOS 录屏 gif LICEcap bug 授权问题? 如何在 Mac 上录制屏幕 https://support.apple.com/zh-cn/HT208721 Command + Shif ...

  8. how to open a terminal in finder folder of macOS

    how to open a terminal in finder folder of macOS shit service demo refs https://lifehacker.com/launc ...

  9. how to overwrite css !important style

    how to overwrite css !important style css !important bug how to override css !important style https: ...

  10. 2020 NGK 全球启动大会于美国硅谷圆满落幕

    据NCC报道美国西海岸时间11月25日,NGK全球启动大会在美国加利福尼亚北部的硅谷会展中心成功举办.本次大会吸引了来自世界各地的企业家.创业者.开发者,以及投资人达一万人次齐聚硅谷. NGK创始人. ...