【odoo14】【好书学习】第二章、管理odoo实例

老韩头的开发日常【好书学习】系列

本章主要介绍肖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. 重启应用实例
$ ./odoo-bin -c odoo.conf

原理

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

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

更多

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


规范化实例目录布局

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

步骤

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

$ odoo/odoo-bin -c instance.cfg -d dbname -i addon1,addon2 \
--stop-after-init
  1. 重启实例。
    更新模块方法类似,通过如下命令
$ odoo/odoo-bin -c instance.cfg -d dbname -u addon1 \
--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,以方便进行回退
$ git checkout 14.0
$ git tag 14.0-before-update-$(date --iso)
  1. 拉取最新的代码
$ git pull --ff-only
  1. 更新模块
  2. 重启实例

原理

通常模块开发者发布最新版的模块,包含bug修复及新功能。在这,我们获取到一个新版本并更新。
如果git pull --ff-only失败,则可以回退到上一个版本。

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

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

Applying and trying proposed pull requests

posted @ 2021-02-23 21:05  老韩头的开发日常  阅读(1211)  评论(0编辑  收藏  举报