Odoo 14开发者指南第一章 安装Odoo开发环境

配置Odoo开发环境有很多种方式。本章中提供了其中的一种,你肯定可以在网上找到其它的教程讲解其它方法。请记住本章中所讲解的是开发环境,与生产环境的要求是不同的。

如果你是一个Odoo开发新手,必须要了解Odoo生态的方方面面。第一部分会给出这些方面的简短介绍,然后我们就会进入到Odoo开发所需的安装。

本章中,我们将讲解如下主题:

  • 了解Odoo生态系统
  • 源码轻松安装Odoo
  • 管理Odoo服务端数据库
  • 在文件中存储实例配置
  • 启用Odoo开发者工具
  • 更新插件模块列表

参考安装脚本:Github

了解Odoo生态系统

Odoo为开发者提供了开箱即用的模块结构。它强大的框架有助于开发者很快地构建项目。在开启成为成功的Odoo开发者之旅以前,应该要熟悉Odoo生态中的一些特性。

Odoo版本

Odoo有两个版本。第一个是社区版,完全开源,另一个是企业版,需要支付授权证书费用。不同于其它软件供应商,Odoo企业版仅仅是在社区版基础上添加了一些附加特性或新应用的高级应用。基本上,企业版运行于社区版之上。社区版采用Lesser General Public License v3.0 (LGPLv3)许可证书,并带有企业版企业资源计划(ERP)的所有基础应用,如销售、客户关系管理(CRM)、发票、采购、网站构建器等等。而企业版采用 Odoo 企业版许可证书,这是一个自有证书。Odoo 企业版带有很多高级功能如完整的财务、studio、基于IP的语音传输(VoIP)、移动端响应式设计、电子签名、营销自动化、快递与银行的集成以及IoT等。企业版还为你提供无限的漏洞修复支持。下图显示了企业版依赖于社区版,这也是为什么使用企业版时需要用到社区版:

图1.1 – 社区版和企业版的差别

 

图1.1 – 社区版和企业版的差别

读者可以访问https://www.odoo.com/page/editions查看这两个版本的完整对比。

📝Odoo有数量庞大的社区开发人员,这也是你在应用商店中看到有大量的第三方应用(模块)的原因。有些免费应用使用Affero General Public License version 3 (AGPLv3)许可证书。如果你的应用依赖于这些应用就不能使用其自有证书。Odoo自有证书的应用仅能在拥有LGPL或其它自有证书的模块基础上进行开发。

Git仓库

Odoo的完整代码托管在GitHub上。可以在这里对稳定版提交漏洞/问题。还可以通过提交拉取请求(Pull Request - PR)来提议添加新功能。Odoo有许多个仓库,参见下表来获取更多信息:

仓库 用途
https://github.com/odoo/odoo 这是 Odoo 的社区版。对公众开放。
https://github.com/odoo/enterprise 这是 Odoo 的企业版。仅对Odoo 官方合作伙伴开放。
https://github.com/odoo-dev/odoo 这是不断开发中的仓库。对公众开放。(已废弃)

每年,Odoo会发布一个大版本(长期支持(LTS)版本)和数个小版本。小版本多用于Odoo的在线SaaS服务,也就是说Odoo的SaaS用户可以更早地使用到这些功能。GitHub 上大版本分支的名称像14.0, 13.0和12.0,而小版本分支名称有saas-14.1和saas-14.2。小版本多用于Odoo 的SaaS平台。master分支处于开发中,不稳定,因此,不建议在生产环境中使用它,因为它可能导致数据库的崩溃。

Runbot

Runbot是Odoo的自动化测试环境。在Odoo的Github 分支中有新提交时,Runbot会拉取最新的修改并并创建最近4个提交的构建。这里,你可以测试所有的稳定版和开发中的分支。甚至可以使用到企业版并测试它的开发分支。

每个构建有不同的背景色,表明测试用例的状态。绿色背景表示所有的测试用例成功运行,用户可以测试该分支,而红色背景表示在这个分支上有些测试用例出错了,有些功能在该构建上可能出现崩溃。可以查看到所有测试用例的日志,会显示在安装过程中所发生的具体问题。每个构建有两个数据库。数据库all安装了所有的模块,而数据库base仅安装了Odoo的基础模块。每个构建均安装了基本演示数据,因此可以快速进行测试而无需额外的配置。

ℹ️使用如下 URL 来访问runbot:http://runbot.odoo.com/runbot

以下账户信息可用于访问任一runbot构建:

  • 登录ID: admin 密码: admin
  • 登录ID:demo 密码: demo
  • 登录ID: portal 密码: portal

📝这是公共测试环境,因此有时可能会有其它用户使用/测试你所测试的相同分支。

Odoo应用商店

Odoo在几年前发布了应用商店,当即大热。现在,那里托管着22,000多个不同的应用。在应用商店中,可以找到大量的针对不同版本的免费和付费应用。包含不同垂直业务领域的具体解决方案,如教育、食品行业和医药业。它还包含一些继承了已有Odoo应用或添加了新功能的应用。应用商店还为Odoo网站构建器提供了大量的美观的主题。在第三章 创建Odoo插件模块中,我们将学习如何为你的自定义模块设置价格和币种。

可以通过如下链接访问Odoo应用商店:https://www.odoo.com/apps。

📝Odoo开源了很版本13和14的主题。在此前的版本均为付费主题。也就是在 Odoo 13和14中无需花费额外费用即可下载、使用这些漂亮的主题。

Odoo社区联盟(OCA)

Odoo社区联盟(OCA)是一个开发/管理Odoo社区模块的非营利组织。所有的OCA模块都开源并由Odoo社区成员维护。在OCA的GitHub账户下,可以找到针对不同Odoo应用的多个仓库。除Odoo模块外,它还包含很多工具、迁移库、会计本地化等等。

以下是OCA官方GitHub账号的URL:https://github.com/OCA。

Odoo官方帮助论坛

Odoo 拥有一个非常强大的框架,大量的操作只需通过使用/激活选项或遵循指定的模式即可实现。因此,如果你碰到了一些技术问题或是对一些复杂用例不确定,那么就可以在Odoo官方帮助论坛上询问。这个论坛上有大量活跃的开发人员,包含一些Odoo官方的员工。

在如下 URL 上可以搜索或提交你的问题:https://help.odoo.com/。

Odoo的eLearning平台

最近Odoo发布了一个全新的eLearning平台。该平台上有大量的视频讲解如何使用各类Odoo应用。在编写本书时,平台上还没有技术相关视频,只是一些介绍功能的视频。

eLearning平台的网址为:https://www.odoo.com/slides。

通过源码轻松安装Odoo

强烈推荐使Linux Ubuntu操作系统来安装Odoo,因为这是Odoo测试、调试和安装Odoo企业版所使用的操作系统,此外大部分的Odoo开发人员都使用GNU/Linux,使用GNU/Linux而非Windows或macOS会更有机会获取操作系统相关问题的社区支持。

也推荐使用和生产环境相同的环境(相同发行版和版本号)进行开发。这样可以避免讨厌的“彩蛋”,比如在部署当天发现有个库有一个预料外的版本,会有一些不同和不兼容的问题。如果你的工作站使用不同的操作系统,一种推荐的方式是在工作站上配置虚拟机(VM)并在 VM 上安装 GNU/Linux发行版。

📝Ubuntu已成为微软商店中的一个应用,如果不希望切换操作系统的话也可以使用它。

本书假定读者使用的是Ubuntu 18.04 LTS版,但也可以使用其它的GNU/Linux系统。不论你选择哪个Linux发行版,都应该要有一个从命令行使用它的概念,有系统运维相关知识显然会更好。

相关文章:Odoo 14安装简明教程(CentOS)

准备工作

假设读者已运行了Ubuntu 18.04并已拥有 root 密码或配置了sudo拥有root访问权限。下面的部分中,我们将安装Odoo的相关依赖并通过GitHub下载Odoo源码。

ℹ️有些配置需要使用到系统登录用户,这里我们在需要用到用户名时在命令行中使用$(whoami)。这个shell命令可以在所键入命令中替换为登录用户。

如果你有GitHub账户的话有些操作一定会更容易。如果还没有GitHub账户,请访问https://github.com并创建账户。

如何安装…

使用源码安装 Odoo,需要按照如下的步骤:

  1. 运行如下命令来安装主要依赖:

    1
    2
    $ sudo apt-get update
    $ sudo apt install git python3-pip build-essential wget python3-dev python3-venv python3-wheel libxslt-dev libzip-dev libldap2-dev libsasl2-dev python3-setuptools libpq-dev -y
  2. 下载并安装wkhtmltopdf:

    1
    2
    $ wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox_0.12.5-1.bionic_amd64.deb
    $ sudo dpkg -i wkhtmltox_0.12.5-1.bionic_amd64.deb

    如果以上命令出现了报错,通过如下命令可强制安装依赖:

    1
    $ sudo apt-get install -f
  3. 此时安装PostgreSQL数据库

    1
    $ sudo apt install postgresql -y
  4. 配置PostgreSQL

    1
    $ sudo -u postgres createuser --superuser $(whoami)

    译者注: 如果报错说明服务未启动createuser: could not connect to database template1: could not connect to server: No such file or directory

    1
    sudo systemctl start postgresql
  5. 配置git(以下信息请自行修改):

    1
    2
    $ git config --global user.name "Your Name"
    $ git config --global user.email youremail@example.com
  6. 克隆 Odoo 基础代码:

    1
    2
    3
    $ mkdir ~/odoo-dev
    $ cd ~/odoo-dev
    $ git clone -b 14.0 --single-branch --depth 1 https://github.com/odoo/odoo.git
  7. 创建一个odoo-14.0 虚拟环境并启用:

    1
    2
    $ python3 -m venv ~/venv-odoo-14.0
    $ source ~/venv-odoo-14.0/bin/activate
  8. 在venv中安装Odoo的Python依赖:

    1
    2
    $ cd ~/odoo-dev/odoo/
    $ pip3 install -r requirements.txt
  9. 创建并启动第一个Odoo实例:

    1
    2
    $ createdb odoo-test
    $ python3 odoo-bin -d odoo-test -i base --addons-path=addons --db-filter=odoo-test$
  10. 在浏览器中访问http://localhost:8069(虚拟机请修改为对应的 IP 地址),并使用admin账户和密码admin来进行登录

    📝如需RTL(文字从右向左)的支持,请使用如下命令安装node 和 rtlcss :

    1
    2
    sudo apt-get install nodejs npm -y
    sudo npm install -g rtlcss

运行原理…

第1步中,我们安装了一些核心依赖。这些依赖包含各类工具,如git, pip3, wget, Python设置工具等。这些核心工作帮助我们使用简单命令安装其它Odoo依赖。

第2步中,我们下载并安装了wkhtmltopdf包,用于在Odoo中将销售订单、发票等报告打印为PDF文档。Odoo 14.0要求使用wkhtmltopdf的0.12.5版本,这一版本可能在当前Linux发行版中并未包含。所幸wkhtmltopdf的维护者在http://wkhtmltopdf.org/downloads.html为我们提供了针对各发行版的预构建包,通过该URL可进行下载及安装。

PostgreSQL配置

第3步中,我们安装了PostgreSQL数据库。

第4步中,我们通过系统登录用户名新建了一个数据库。$(whoami) 用于获取系统用户名,-s选项用于授予超级用户权限。我们来了解下为什么需要这些配置。

Odoo使用psycopg2 Python库来与PostgreSQL数据库建立连接。通过psycopg2库访问PostgreSQL数据库。Odoo使用如下的默认值:

  • 默认psycopg2尝试使用本地连接的当前用户相同的用户名来连接数据库,这会启动无密码认证(在开发环境中这样很好)
  • 本地连接使用Unix域套接字
  • 数据库服务监听5432端口

这样就好了!PostgreSQL现在就做好了与Odoo建立连接的准备。

因为这个是开发服务器,我们对用户授予了–superuser的权限。对生产实例,可以在命令行中使用–createdb来代替–createdb以进行权限限制。在生产服务上–superuser权限会给予黑客在一些部署代码中找到更多漏洞的机会。

如果想使用不同的数据库用户,则需提供该用户的密码。通过在创建用户时在命令行传递–pwprompt标记来实现,此时命令行会提示你输入密码。

如果用户已存在而你又想要为其设置密码(或修改已忘记的密码),可以使用如下命令:

1
$ psql -c "alter role $(whoami) with password 'newpassword'"

如果这个命令执行报错提示数据库不存在,那是因为你没按照操作步骤的第4步创建一个与当前登录名相同的数据库。不必担心,仅需使用 –dbname选项来添加已有数据库名,例如 –dbname template1。

Git配置

开发环境我们使用GitHub上的Odoo源代码。借助于git可以轻松地在各个Odoo版本间进行切换。同时可以使用git pull命令拉取最新的修改。

在第5步中,我们配置了git用户信息。

第6步中,我们从Odoo官方GitHub仓库下载了源代码。使用的是git clone命令来下载Odoo源代码。指定了单分支这样只需要下载14.0版本的分支即可。同时还使用了–depth 1来避免下载该分支的完整历史提交。这些选项会让源代码下载变得快速,你也可以在需要的时候省略掉这些选项。

Odoo开发者还推荐nightly构建,以tar文件和发行包的形式出现。使用git clone最主要的优势是在源代码树中提交了新的bug修复时可以对仓库直接进行更新。还能够轻松地测试所推荐的修复并追踪回退,这样会让bug报告更为精确、对开发者也更有帮助。

📝如果你可以访问企业版源代码,也可以将其下载到~/odoo-dev目录下面单独的文件夹中。

虚拟环境

Python虚拟环境或简称virtualenv,是隔离的Python工作空间。这些对于Python开发者非常有用,因为它们允许在Python解释器版本上安装不同版本的Python库。

你可以使用python3 -m venv ~/newvenv命令来创建所需数量的环境。这会在指定位置创建一个newenv目录,其中包含一个bin/子目录和一个lib/python3.6(译者注: 或你安装的其它 Python 3版本)子目录。

在第7步中,我们在~/venv-odoo-14.0目录下新建了一个虚拟环境。这就是我们为Odoo准备的独立Python环境。Odoo的所有Python依赖都在这一环境中进行安装。

要启用虚拟环境,我们需要使用source命令。通过source ~/venv-odoo-14.0/bin/activate,我们激活了该虚拟环境。

安装 Python包

Odoo的源代码中有一系列Python依赖,位于requirements.txt中。第8步中,我们通过pip3 install命令安装了所有这些依赖。

这样就可以了,此时即可运行Odoo实例。

启动实例

到了你期待已久的时刻了。要启动我们的第一个实例,第9步中首先我们新建了一个空数据库,然后使用odoo-bin以及如下命令行参数启动Odoo实例:

1
python3 odoo-bin -d odoo-test -i base --addons-path=addons --db-filter=odoo-test$

可以通过在odoo-bin的前面添加./来省略掉python3,因其是一个可执行的Python脚本,如下:

1
./odoo-bin -d odoo-test –i base --addons-path=addons --db-filter=odoo-test$

odoo-bin后使用了如下命令行参数:

  • -d database_name:默认使用这一数据库。
  • –db-filter=database_name$:仅尝试连接匹配所提供正则表达式的数据库。一个Odoo安装可以为使用不同数据库的多个实例提供服务,通过这一参数限制可用的数据库。最后的那个$很重要,因为在匹配模式中使用了正则表达式,这会避免选择以相同的指定字符串开头的名称。
  • –addons-path=directory1,directory2,…:Odoo通过这一逗号分隔列表中的目录来查找插件(add-on)。在实例创建的时候扫描该列表来添加实例中可用的插件模块列表。如果希望使用Odoo企业版,请在这一选项中添加其目录。
  • -i base: 用于安装base模块。通过命令行创建数据库时需要使用到。

如果你使用了与Linux当前登录用户不同的数据库用户,则需要再传递如下的参数:

  • –db_host=localhost: 使用TCP连接数据库服务
  • –db_user=database_username: 使用指定的数据库登录用户
  • –db_password=database_password: 这是用于认证PostgreSQL服务的密码

使用–help可获取所有可用选项的一个总览。我们在本章后面还会来了解odoo-bin脚本更多的知识。

Odoo在一个空数据库上启动时,它会首先创建一个支持其操作所需的数据库结构。还会扫描插件路径来查找可用的插件模块,并将一些内容插入到数据库的初始记录中。这包括admin用户及默认admin密码,在登录时将使用到。

在浏览器中访问http://localhost:8069/( 译者注: 非本地请自行修改为 IP 地址)会访问到你所新创建的实例的登录页面,如下图所示:

图1.2 - Odoo实例的登录页面

图1.2 - Odoo实例的登录页面

这是因为Odoo内置有HTTP服务器。默认,它监听TCP端口8069上的所有本地网络接口。

管理Odoo服务端数据库

在使用Odoo时,你的实例所有的数据都存储在PostgreSQL数据库中。可以使用你习惯的任意标准数据库管理工具,但Odoo为一些常用操作提供了一个网页界面。

准备工作

我们假定你的工作环境已配置好,并且已运行了一个实例。

如何管理…

Odoo数据库管理界面提供创建、复制、删除、备份和恢复数据库的工具。还有一种修改主控密码(master密码)的方式,用于保护对数据库管理界面的访问。

访问数据库管理界面

需要执行如下步骤来访问数据库:

  1. 进入实例的登录页面(如果已登录请先登出)。
  2. 点击Manage Databases链接。这会导航至http://localhost:8069/web/database/manager(也可以在浏览器中直接访问这个URL)。

图1.3 – 数据库管理器

图1.3 – 数据库管理器

设置或修改主控密码

如果已经以默认值设置了实例且尚未像下面讲解的那样做过修改,数据库管理页面会显示一条警告,告诉你还没有设置主控密码并建议你通过直接点击链接来进行设置:

图1.4 – Master密码警告

图1.4 – 主控密码警告

需要执行如下步骤来设置master:

  1. 点击Set Master Password按钮。会弹出一个对话框来要求你提供新的主控密码:
    设置 Master 密码对话框图1.5 – 设置新主控密码对话框
  2. 输入一个复杂的新密码并点击Continue

如果已设置了主控密码,点击页面底部的Set Master Password按钮来进行修改。在弹出的对话框中输入老的主控密码再输入新密码,然后点击Continue。

📝主控密码是在admin_password键下的服务端配置。如果启动服务时没有指定配置文件,会在~/.odoorc中生成新的配置文件。查看下一部分获取更多有关配置文件的信息。

创建新数据库

这个对话框用于创建一个由当前Odoo服务处理的新数据库实例:

  1. 在数据库管理窗口中,点击页面底部的Create Database按钮。会弹出如下对话框:
    创建数据库页面图1.6 – 新建数据库对话框

  2.  填写表单,如下:

    • Master Password:这是这一实例的主控密码。
    • Database Name:输入所想要创建的数据库名称。
    • Email: 在此处添加email地址;在稍后用作用户名。
    • Password:输入你想为新实例所设置的admin用户密码。
    • Phone Number:设置电话号码(可选)。
    • Language:在下拉列表中选择你希望新数据库默认安装的语言。Odoo会自动加载所选语言的翻译。
    • Country:在下拉列表中选择主租户的国家。选择这一项后会自动做一些配置,如公司的币种。
    • Demo data:勾选获取演示数据。这对于运行交互式测试或为用户设置演示项目非常有用,但针对包含生产数据的数据库设计时则不应勾选。

    ℹ️如果想要使用该数据库来运行模块的自动化测试(参见第七章 调试),则需要有演示数据,因为Odoo中的大多数自动化测试依赖于这些记录来成功运行。

  3. 点击Continue按钮并等待新数据库初始化完成。然后会被重定向到该实例并以管理员进行连接。

问题处理:如果被重定向到了登录页,这可能是因为向Odoo传递了–db-filter选项并且与新数据库名不匹配造成的。注意odoo-bin start会默默地进行这一操作,仅让当前数据库可用。解决这一问题,只需不使用start命令来对Odoo进行重启,在本章中的通过源码轻松安装 Odoo 一节展示过这一做法。如果你有一个配置文件(参见本章后面的在一个文件中存储实例配置一节),那么请检查db_filter未进行设置或设置一个与新数据库名称匹配的值。

复制数据库

通常你已经有一个数据库了,会希望使用它做一存储过程的试验或运行测试,但又不修改已有数据。这里的方案很简单:复制该数据库并在拷贝上运行测试。可以按需重复多次:

  1. 在数据库管理页面,点击Duplicate Database:
    Duplicate Database图1.7 – 复制数据库对话框

  2. 填写表单如下:

    • Master Password:这是Odoo服务的主控密码
    • New Name:给予拷贝的名称
  3. 点击Continue按钮。

  4. 可以在数据库管理页面点击新创建的数据库名称来访问该数据库的登录页面。

删除数据库

在完成测试之后,如想要清理掉所复制的数据库。通过如下步骤来进行清理:

  1. 在数据库管理页面,点击想删除的数据库名称旁的Delete Database链接,会出现下图中的对话框:
    Delete Database图1.8 – 删除数据库弹窗
  2. 填写表单并输入 Master Password,即Odoo服务的主控密码。
  3. 点击Delete按钮。

📝小心!数据丢失!

如果你选择了错误的数据库,并且没有备份,则无法恢复损失的数据。

备份数据库

需执行如下步骤来创建备份:

  1. 在数据库管理页面,点击想备份数据库名称旁的Backup按钮,会弹出下图这样的对话框:
    Backup Database图1.9 – 备份数据库弹窗

  2. 填写表单

    • Master Password:Odoo服务的主控密码。
    • Backup Format:对生产数据库请保持使用zip,因为这是唯一真正的全量备份格式。仅在备份不关心文件存储的开发数据库时使用pg_dump格式。
  3. 点击Backup。然后浏览器会下载备份文件。

还原数据库备份

如果需要还原一个备份,需要按如下步骤操作:

  1. 在数据库管理页面,点击页面底部的Restore Database按钮,会弹出如下的对话框:
    Restore Database图1.10 – 还原数据库对话框

  2. 填写表单:

    • Master Password:这是Odoo服务的主控密码。
    • File:这是之前所下载的Odoo备份
    • Database Name:提供你需进行备份还原的数据库名称。该数据库在服务器上一定不能存在。
    • 数据库可能进行了迁移或拷贝:如果原数据库在另一台服务器上或是为从当前服务器删除则选择This database was moved。否则选择This database is a copy,这也是安全的默认选项。
  3. 点击Continue按钮。

📝不能在数据库自身之上还原数据库。这么做会得到一条错误消息(Database restore error: Database already exists)。需要先删除该数据库。

运行原理…

除Change master password以外的这些页面上的功能,是在服务器上运行PostgreSQL运维命令并通过网页界面报告结果。

主控密码是非常重要的信息,仅存储在Odoo服务的配置文件中,从不在数据库中进行存储。曾经有一个admin默认值,但使用这个值是一个广为人知的安全问题。在Odoo v9及之后的版本中,这被识别为一个未设置的主控密码,并在访问数据库管理页面时会敦促你修改密码。虽然这在配置文件中以admin_passwd进行存储,它与admin的密码是不同的,它们是两个不同的密码。主控密码是为Odoo服务进程设置的,进程本身可以处理多个数据库实例,每个实例都有一个独立的admin用户及其自己的密码。

📝安全考虑:记住本章中我们所考虑的是开发环境。Odoo数据库管理界面在我们运行生产服务时是需要进行安全保护的,因为这里给到了过多敏感信息的访问权限,尤其是在服务器托管了多个不同客户端的Odoo实例时。

Odoo使用PostgreSQL的createdb工具来新建数据库,它通过和以空数据库启动Odoo时相同的方式调用内部的Odoo函数来初始化新数据库。

Odoo使用createdb的–template选项传递原数据库作为参数来复制数据库。这基本上使用内部优化的PostgreSQL例行程序在新数据库中复制模板数据库的结构,这比创建备份和还原备份的速度会快很多(尤其是在使用网页界面时,还要求你下载备份文件然后再重新上传)。

备份和还原操作分别使用pg_dump和pg_restore工具。在使用zip格式时,备份还包含文件存储的拷贝,其中为配置Odoo不保存在数据库中的文档的拷贝,这是14.0中的默认选项。如果没做过修改的话,这些文件存放在~/.local/share/Odoo/filestore中。

📝如果备份很大,下载时会失败。这可能是因为Odoo服务本身无法在内存中处理这么大的文件或者是因为服务在反向代理之后运行,而这个代理设置了HTTP响应大小的限制。反过来,出于某些原因,你可能会在还原数据库的操作中遇到问题。在碰到这些问题时,应当投入时间建立更健壮的外部备份方案。

更多内容…

有经验的Odoo开发者通常不使用数据库管理界面,而在命令行执行相关操作。比如使用演示数据初始化新数据库,可以使用如下的一行代码:

1
$ createdb testdb && odoo-bin -d testdb

命令行的另一个彩蛋是可以在使用时要求安装一些插件,比如 -i sale,purchase,stock。

停止服务并运行如下这些命令来复制数据库:

1
2
3
4
$ createdb -T dbname newdbname
$ cd ~/.local/share/Odoo/filestore # 如果你修改了data_dir请调整此处
$ cp -r dbname newdbname
$ cd -

注意在开发的上下文中,文件存储通常会被省略。

📝createdb -T 仅在数据库没有活跃会话时方能使用,这表示在通过命令行复制数据库之前你需要关闭Odoo服务。

可运行如下命令来删除一个实例:

1
2
$ dropdb dbname
$ rm -rf ~/.local/share/Odoo/filestore/dbname

可运行如下命令来创建一个备份(假设PostgreSQL服务在本地运行):

1
2
$ pg_dump -Fc -f dbname.dump dbname
$ tar cjf dbname.tgz dbname.dump ~/.local/share/Odoo/filestore/dbname

可运行如下命令来还原备份:

1
2
$ tar xf dbname.tgz
$ pg_restore -C -d dbname dbname.dump

📝当心!

如果你的Odoo实例使用了另一个用户连接数据库,需要传递-U username来使用正确的用户作为还原数据库的所有者。

在文件中存储实例配置

odoo-bin脚本有几十个选项,记住所有这些以及记得在启动服务时适当地进行配置会非常单调费力。所幸可以将它们存储在一个配置文件中,只需对想要修改的选项进行手动修改,比如为开发环境做修改。

如何配置

对于本小节可执行如下步骤:

  1. 运行如下命令来为你的Odoo实例生成一个配置文件:

    1
    $ ./odoo-bin --save --config myodoo.cfg --stop-after-init
  2. 还可以添加其它选项,它们的值会被保存到所生成的文件中。所有未设置的值都会以默认值进行保存。使用如下命令来获取可用的选项列表:

    1
    $ ./odoo-bin --help | less

    这会提供一些不同选项所执行内容的帮助文档。

  3. 要从命令行形式转化为配置形式,使用长选项名,删除前面的中间杠,并将中间的中间杠转换为下划线。–without-demo就变成了without_demo。对大多数选项都是如此,但有一些例外,在下一部分中会列出。

  4. 编辑myodoo.cfg文件(使用下一部分中的表格来查看所要修改的参数)。然后运行如下命令来以所保存的选项启动服务:

    1
    $ ./odoo-bin -c myodoo.cfg

    📝-config选项通常简写为-c。

运行原理

启动时,Odoo通过三个步骤来加载它的配置。首先,所有选项的一组默认值会从源码中进行初始化,然后解析配置文件,该文件中所定义的任意值会覆盖默认值。最后,会分析命令行选项,它们的值会覆盖前面步骤中所获取的配置。

前面我们已提到,配置变量的名称可通过删除命令行选项的前置中间杠以及将中间的连接符转换为下划线来获取。其中有一些例外,特别是下面这些:

命令行 配置文件
–db-filter dbfilter
–no-http http_enable = True/False
–database db_name
–dev dev_mode
–i18n-import/–i18n-export 不可用

表1.2

以下是通过配置文件设置的常用选项列表:

选项 格式 用途
without_demo 逗号分隔的模块名列表 该选项阻止模块演示数据被加载。 设置为all取消所有模块的演示数据,设为False为所有模块启用演示数据。对具体模块禁用演示数据,应提供模块名,如 sale,purchase,crm。
addons_path 逗号分隔的路径列表 这是一个服务查找插件的路径名列表。
admin_passwd 文本 这是 master 密码(参见前面部分的内容)
data_dir 一个目录路径 这个目录中服务会存储session信息、从网上下载的插件以及在启用了文件存储时存放文档。
http_interface 网络接口的 IP 地址 默认为0.0.0.0,表示服务监听所有接口。
http_port longpolling_port 端口号 这些是 Odoo 服务所会监听的端口。你需要指定这两者来在同一台主机上运行多个 Odoo 服务;longpolling_port仅在workers不为0时使用。 http_port默认值为8069,longpolling_port默认为8072。
logfile 文件路径 Odoo 写入日志的文件。
log_level 日志信息级别 指定日志的级别。可接受的值(内容逐渐增加)包括critical, error, warn, info, debug, debug_rpc, debug_rpc_answer, debug_sql。
workers 整数 worker进程的数量,更多信息参见第三章 服务器部署
proxy_mode True/False 激活反向代理WSGI封装。仅在运行于可信任的 web 代理后启用它。

表1.3

以下是与数据库相关的配置选项列表:

选项 格式 用途
db_host 主机名 这是运行PostgreSQL服务的服务器名。使用 False 来使用本地 Unix 域套接字,以及 localhost 来使用本地 TCP 套接字。
db_user 数据库登录用户 在db_host为 False 时这通常为空。这将是用于连接数据库的用户。
db_password 数据库用户密码 在db_host为 False以及 db_user 与运行服务的用户相同时通常为空。阅读pg_hba.conf的主页面来获取更多相关信息。
db_name 数据库名 用于设置一些默认执行命令操作的数据库名。这不会限制服务所操作的数据库。参照下面的 dbfilter 参数。
db_sslmode 数据库SSL模式 用于指定数据库SSL连接模式。
dbfilter 一个正则表达式 该表达式应匹配服务所使用的数据库名。如果你运行网站,应该匹配单个数据库,类似^databasename$。更多相关信息请参见第三章 服务器部署
list_db True/False 设置为 True 来取消列出数据库。更多信息请参见第三章 服务器部署

表1.4

译者注: 表中的pg_hba.conf文件位置:/etc/postgresql/xxx/main/pg_hba.conf,另表中的第三章 服务器部署为上一版中的内容,在本书中已不再包含。

Odoo对配置文件的解析现在使用Python的ConfigParser模块。但是在Odoo 11.0中的实现发生了变化,它不再支持使用变量插值。因此,如果你习惯了使用%(section.variable)s表达式通过其它变量的值定义变量值的话,需要改变这一习惯并恢复使用显式的值。

有些选项不在配置文件使用,但广泛用于开发之中:

选项 格式 用途
-i或–init 逗号分隔的模块名列表 它会在初始化数据库时默认安装给定的模块
-u 或-update 逗号分隔的模块名列表 它会在重启服务时更新给定的模块。多在修改了源代码或从 git 更新了分支时使用
–dev all, reload, qweb, werkzeug, xml 这会启用开发者模式及自动重新加载功能。

表1.5

激活Odoo开发者工具

开发人员在使用Odoo时,应当知道如何在网页界面激活开发者模式,这样你就可以访问技术设置菜单及开发者信息。启动调试模式会暴露出一些高级配置项及字段。Odoo隐藏这些选项和字段来实现更好的易用性,因为日常不会使用到它们。

如何激活

按照如下步骤来在网页界面中激活开发者模式:

  1. 连接到你的实例并以 admin 登录
  2. 访问Settings菜单
  3. 滚动至页面底部,找到Developer Tools版块
    图1.11 – 启用不同开发者模式的链接
    图1.11 – 启用不同开发者模式的链接
  4.  点击Activate the developer mode链接
  5. 等待用户界面重载

ℹ️其它方式: 也可以通过编辑 URL 来激活开发者模式。在链接的#号前,插入?debug=1。例如,如果你的链接是http://localhost:8069/web#menu_id=102&action=94,那么你需要将其修改为http://localhost:8069/web?debug=1#menu_id=102&action=94。此外,如果你想要使用带静态文件的调试模式,则将 URL修改为http://localhost:8069/web?debug=assets#menu_id=102&action=94

译者注: 加(with assets)的模式会将静态文件(css, js)分拆每一个具体文件,这将有助于调试,但相对于合并的静态文件而言会损失一些加载速度

通过如下其中一种方式可退出开发者模式:

  • 编辑URL并在查询字符串中写入?debug=0
  • 通过使用Settings菜单相同位置下的Deactivate the developer mode链接
  • 点击顶部调试小虫图标,在下拉菜单中点击Leave Developer Tools选项

很多开发者使用浏览器插件来切换调试者模式。通过使用插件,可以无需访问settings菜单快速地切换调试模式。这些插件可在Firefox和Chrome浏览器中使用。参见如下截图,它有助于你在Chrome商店中找到该插件:

Odoo Debug Chrome 插件

图1.12 – 调试模式的浏览器插件

📝调试模式的行为从Odoo v13开始发生了改变。从v13开始,调试模式的状态存储在会话中,那么即使在URL中删除掉?debug,调试模式依然处于启动状态。

运行原理

开发者模式中,会发生两件事情:

  • 鼠标在表单视图的字段上或列表视图的列名上悬浮时会给出提示信息,提供该字段的技术信息(内部名称、类型等)。
  • 调试图标下拉菜单会显示在右上角用户菜单旁,给到显示的模型相关技术信息的访问,有各种关联的视图定义、工作流、自定义过滤管理等等。

开发模式有一个变体:Developer mode (with assets)。这一模式和普通的开发者模式相似,但除此之外,发送到浏览器的JavaScript 和 CSS没有做最小化处理,这表示你浏览器的web开发者工具可以方便地用于调试JavaScript代码(更多内容请见第十五章 网页客户端开发)。

📝注意!

使用非开发者模式及开发者模式来测试你的插件,因JavaScript库的非最小化版本会隐藏最小化版本中伤你至深的 bug。

更新插件模块列表

在新增模块时,Odoo并不知道新模块的存在。为在Odoo中列出该模块,需要更新模块列表。本小节中学习如何更新应用列表。

准备工作

启动实例并使用Administrator账号连接实例。然后启用开发者模式(如尚不知道如何启用开发者模式,参见第一章 安装Odoo开发环境)。

如何实现…

在实例中更新已有的插件模块列表,执行如下步骤:

  1. 打开Apps菜单
  2. 点击Update Apps List。
    图1.13 – 更新应用列表的菜单项
    图1.13 – 更新应用列表的菜单项
  3. 在弹出的对话框中点击Update按钮:
    图1.14 – 更新应用列表对话框
    图1.14 – 更新应用列表对话框
  4. 在更新结束时,可以点击Apps查看更新后的可用插件模块列表。需要删除掉Apps搜索框中默认的过滤器来查看所有模块。

运行原理…

在点击Update按钮时,Odoo会读取插件路径配置变量。对于列表中的每个路径,它会查找插件声明文件包含的直接子目录,声明文件__manifest__.py存储在插件模块目录下。Odoo读取声明内容,查找其中的Python字典。只要声明中键为installable的实例不设置为False,就会将插件模块元数据存储到数据库中。如果模块已存在,会更新信息。如不存在,会新建一条记录。如果此前可用的插件模块查找不到,也不会从列表中进行删除。

📝仅在初始化数据库后新增插件路径时才需要更新应用列表。如果在初始化数据库之前在配置文件中新增了插件路径,则无需手动更新模块列表。

总结一下我们目前所学到的知识,在完成安装后,我们使用如下命令启动Odoo服务(如果使用了虚拟环境,需要先激活该环境):

1
python3 odoo-bin -d odoo-test -i base --addons-path=addons --db-filter=odoo-test

运行后,可以通过http://localhost:8069 来访问Odoo。

还可以使用配置文件来运行Odoo,如下:

1
./odoo-bin -c myodoo.cfg

启动好Odoo服务后,可以在Apps 菜单下安装/更新其中的模块。

常见问题

1、Running setup.py install for psycopg2 … error
ERROR: Command errored out with exit status 1

1
apt install libpq-dev -y