为开启我们的Odoo开发之旅,我们要通过安装Odoo的源代码来配置我们的开发环境,这样可以对源码增强、调试及提高自身的开发技能。配置Odoo开发环境的方法有很多,但本章意在最佳方法。读者可以在网上找到讲解其他方法的教程。请注意,本章配置的是开发环境,其需求与生产环境不同;生产环境有不同的参数,必须根据系统中的数据量和用户量对配置文件做配置。在本章中会介绍配置文件参数及其使用方法。
如果你是Odoo开发的新手,应了解Odoo生态系统的具体面。第一节将简要介绍Odoo生态系统,之后我们将安装Odoo用于开发。
本章中,我们会讲解如下内容:
- 了解Odoo生态系统
- 源代码安装Odoo
- 管理Odoo服务数据库
- 将实例配置存储在文件中
- 启用Odoo开发者工具
- 更新插件模块列表
技术准备
本章中使用的所有代码都可以从本书的GitHub仓库https://github.com/alanhou/odoo-cookbook/tree/main/Chapter01下载。
了解Odoo生态系统
Odoo为开发者提供了开箱即用的模块,其强大的框架可快速构建项目。在踏上成为成功Odoo开发者的旅程之前,应该熟悉Odoo生态系统中的各种角色。
假设读者有一个拥有4核CPU、8 GB内存和30个并发Odoo用户的系统。
要确定所需的工作进程数量,请将用户数量除以6。此例中,30个用户除以6等于5,这是所需的理论工作进程数量。
要计算理论最大工作进程数量,将CPU的核数乘以2并加1。对于4核CPU,(4 * 2)+ 1等于9,这是理论上的最大工作进程数量。
根据这些计算,可以为Odoo用户使用5个工作进程,再加上一个cron工作进程,总共6个工作进程。
预估内存消耗,可使用以下公式:
内存 = 工作进程数量 * ((0.8 * 150) + (0.2 * 1024))
上例中,6个工作进程乘以((0.8 * 150) + (0.2 * 1024))大约等于2 GB的内存。
因此,根据计算,Odoo安装需要大约2 GB的内存。
Odoo版本
Odoo有两个不同的版本。一个是开源的社区版,另一个是有许可费用的企业版。与其他软件供应商不同,Odoo企业版只是在社区版之上增加了额外功能或新应用的额外应用包。社区版采用较宽松的通用公共许可证v3.0(LGPLv3),包含所有基本的企业资源规划(ERP)应用程序,如销售、客户关系管理(CRM)、发票、采购和网站构建器。而企业版采用Odoo企业版许可证,这是一种专有许可证。Odoo企业版具有多个高级功能,如完整的会计、Odoo Studio、IP电话(VoIP)、移动端响应式设计、电子签名、营销自动化、物流和银行集成、物联网(IoT)等。企业版还提供无限制的bug修复支持。下图展示了企业版基于社区版,这就是为什么使用企业版也需要社区版:
图1.1 – 社区版和企业版的区别
两个版本的完整比较可参见:https://www.odoo.com/page/editions。
注:Odoo在所有开源ERP中拥有最大的社区开发者数量,在GitHub上有超过2万个fork,因此可在应用商店中找到大量的第三方应用程序(模块)。一些免费应用程序使用的是 Affero通用公共许可证第3版(AGPLv3)。如果您的应用程序依赖于此类应用程序,则不能对应用程序使用专有许可证。具有Odoo专有许可证的应用程序只能在具有LGPL或其他专有许可证的模块上开发。
Git代码库
Odoo的整个代码库托管在GitHub上。可以对稳定版本提交bug/issue。还可以通过提交拉取请求(PR)来提交新功能。在Odoo中有多个代码库。更多信息请参见下表:
仓库 | 用途 |
---|---|
https://github.com/odoo/odoo | 这是 Odoo 的社区版。对公众开放。 |
https://github.com/odoo/enterprise | 这是 Odoo 的企业版。仅对Odoo 官方合作伙伴开放。 |
https://github.com/odoo-dev/odoo | 这是不断开发中的仓库。对公众开放。(已废弃) |
每年,Odoo会发布一个主版本,这是一个持续维护3年长期支持版本,同时会发布一些小版本。小版本主要用于Odoo的在线软件即服务(SaaS)产品,也即Odoo SaaS用户可以提前获取这些功能。主版本分支的命名如17.0、16.0、15.0、14.0、13.0和12.0,而小版本分支在GitHub上的命名如saas-17.1和saas-17.2。这些小版本主要用于Odoo的SaaS平台。master分支表正在开发中且不稳定,因此不建议在生产中使用,因为它可能会破坏数据库。
Runbot
Runbot是Odoo的自动化测试环境。在Odoo的GitHub分支中有新的提交时,Runbot会拉取这些最新更改,并为最近的四次提交创建构建。这里,我们可以测试所有稳定和开发中的分支。甚至可以使用企业版及其开发分支进行试验。
每个构建有不同的背景色,表示测试用例的状态。绿色背景表示所有测试用例都成功运行,可以测试该分支,而红色背景表示该分支上的一些测试用例失败,某些功能可能在该构建中存在问题。还可以查看所有测试用例的日志,日志显示了安装期间发生的具体情况。每个构建有两个数据库。all数据库安装了所有模块,而base数据库只安装了基础的Odoo模块。每个构建都安装了基本的演示数据,因此您可以快速测试,而无需额外配置。
注:可以通过http://runbot.odoo.com/runbot访问Runbot。
以下账号可用于访问任意Runbot构建:
用户名: admin 密码: admin
用户名: demo 密码: demo
用户名: portal 密码: portal
注:这是公共测试环境,因此其他用户可能正在使用/测试您正在测试的相同分支。
Odoo应用商店
Odoo数年前推出了应用商店,并马上获得了成功。在撰写本文时,有超过39,000个不同的应用程序托管在应用商店。可找到许多不同版本的免费和付费应用程序。包括不同业务垂直领域的特定解决方案,如教育、食品行业和医疗。还包含扩展或添加新功能到现有Odoo应用程序的应用程序。应用商店还提供了许多用于Odoo网站构建器的美观主题。在第三章 创建Odoo插件模块中,我们将学习如何为自定义模块设置定价和币种。
可通过访问https://www.odoo.com/apps进入Odoo应用商店。
可通过访问https://www.odoo.com/apps/themes进入Odoo的主题页面。
注:Odoo自版本13以来开源了多个主题,现在使用一种称为OWL的高级JavaScript框架。我们将在第16章中讨论。请注意,这些主题在以前的版本中是付费的。也即在Odoo版本15和16中,可以免费下载和使用这些漂亮的主题。
Odoo社区协会
Odoo社区协会(OCA)是一个非营利组织,开发/管理基于社区的Odoo模块。所有OCA模块都是开源的,并由Odoo社区成员维护。OCA的GitHub账户包含多个不同Odoo应用程序的代码库。除了Odoo模块,它还包含各种工具、迁移库、会计本地化等。
OCA官方GitHub账户的URL:https://github.com/OCA。
Odoo官方帮助论坛
Odoo有一个非常强大的框架,只需使用/激活选项或遵循特定模式就可以实现大量功能。因此,如果遇到一些技术问题或对某些复杂情况不确定,可在Odoo的官方帮助论坛上发布问题。许多开发者在这个论坛上很活跃,包括一些官方的Odoo员工。
可以通过访问https://www.odoo.com/forum/help-1搜索问题或发布新问题。
Odoo的在线学习平台
最近,Odoo推出了一个新的在线学习平台。这个平台提供了许多视频,讲解如何使用不同的Odoo应用程序。在撰写本文时,这个平台还没有技术视频,只有功能性视频。
Odoo在线学习平台的URL:https://www.odoo.com/slides。
源代码安装Odoo
强烈建议您使用Linux Ubuntu操作系统安装Odoo,因为这是Odoo用于所有测试、调试和企业版安装的操作系统。此外,大多数Odoo开发者使用GNU/Linux发行版,因此相比Windows或macOS会更有可能从Odoo社区获得操作系统级别问题的支持。
也建议使用与生产环境相同的环境(相同的发行版和相同的版本)来开发Odoo插件。这将避免在部署当天发现库版本与预期不同,或功能稍有不同且不兼容的情况。如果您的工作站使用其它操作系统,一个好的做法是在工作站上配置一个虚拟机(VM),并在VM中安装GNU/Linux发行版。
注:Ubuntu在Microsoft Store中以应用程序进行提供,因此如果不想切换到Ubuntu,可以使用它。
本书我们将使用Ubuntu Server 22.04 LTS,但读者可以使用其他Debian GNU/Linux操作系统。无论您选择哪个Linux发行版,都应该对使用命令行有所了解,了解系统管理也可锦上添花。
准备工作
假设读者已经安装并运行了Ubuntu 22.04,并且具有root访问权限或已配置sudo。在接下来的部分中,我们将安装Odoo的依赖并从GitHub下载Odoo源代码。
注:某些配置需要系统登录用户名,因此在命令行中需要登录用户名时,我们将使用$(whoami)。它是一个shell命令,在您输入的命令中替换为当前登录名。
如果您有GitHub账户,有些操作会更容易。如果还没有,请访问https://github.com并创建一个账户。
如何操作…
要从源代码安装Odoo,请执行以下步骤:
- 运行如下命令安装主要依赖:
12$ sudo apt-get update$ sudo apt install openssh-server fail2ban python3-pip python3-dev libxml2-dev libxslt1-dev zlib1g-dev libsasl2-dev libldap2-dev build-essential libssl-dev libffi-dev libmysqlclient-dev libpq-dev libjpeg8-dev liblcms2-dev libblas-dev libatlas-base-dev git curl python3-venv python3.10-venv fontconfig libxrender1 xfonts-75dpi xfonts-base -y - 下载并安装wkhtmltopdf:
12$ wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-2/wkhtmltox_0.12.6.1-2.jammy_amd64.deb$ sudo dpkg -i wkhtmltox_0.12.6.1-2.jammy_amd64.deb
如在运行以上命令时出现错误,使用如下命令强制安装依赖:
1$ sudo apt-get install -f - 接下来安装PostgreSQL数据库:
1$ sudo apt install postgresql -y - 配置PostgreSQL:
123456$ sudo -i -u postgres createuser -s $(whoami)$ sudo su postgres$ psqlalter user $(whoami) with password 'your_password';\qexit - 配置git:
12$ git config --global user.name "Your Name"$ git config --global user.email youremail@example.com - 克隆Odoo代码库:
123$ mkdir ~/odoo-dev$ cd ~/odoo-dev$ git clone -b 17.0 --single-branch --depth 1 https://github.com/odoo/odoo.git - 创建odoo-17.0虚拟环境并启用:
12$ python3 -m venv ~/venv-odoo-17.0$ source ~/venv-odoo-17.0/bin/activate - 在venv中安装Odoo的Python依赖:
12$ cd ~/odoo-dev/odoo/$ pip3 install -r requirements.txt - 创建并启动第一个Odoo实例:
12$ createdb odoo-test$ python3 odoo-bin -d odoo-test -i base --addons-path=addons --db-filter=odoo-test$ - 在浏览器中访问http://localhost:8069并使用账号admin和密码admin进行登录。
注:如需RTL支持,请通过运行sudo apt-get install nodejs npm -y及sudo npm install –g rtlcss来安装node和rtlcss。
工作原理…
在第1步中,我们安装了几个核心依赖项。这些依赖项包括各种工具,如git、pip3、wget、Python安装工具等。这些核心工具帮助我们使用简单的命令安装其他Odoo依赖项。
在第2步中,我们下载并安装了wkhtmltopdf包,Odoo使用它打印PDF文档,如销售订单、发票和其他报告。Odoo 17.0需要0.12.6.1版本的wkhtmltopdf,该版本可能不在当前的Linux发行版中。所幸,wkhtmltopdf的维护者在http://wkhtmltopdf.org/downloads.html上为各发行版提供了预构建包,我们从该网址下载并安装了它。
接下来,我们配置了用于Odoo数据库管理的PostgreSQL。
PostgreSQL配置
在第3步中,我们安装了PostgreSQL数据库。
在第4步中,我们以系统登录名创建了一个新数据库用户。$(whoami)用于获取当前登录名,而-s选项用于授予超级用户权限。我们来看为什么需要这些配置。
Odoo使用psycopg2 Python库连接PostgreSQL数据库。默认情况下,Odoo使用以下值访问PostgreSQL数据库:
- 默认,psycopg2尝试以当前用户的用户名连接本地数据库,无需密码验证(这对开发环境有益)
- 本地连接使用Unix域套接字
- 数据库服务器监听端口5432
这就搞定了!此处PostgreSQL数据库已准备好与Odoo连接。
由于这是一个开发服务器,我们给用户赋予了--superuser
权限。对于开发实例,给PostgreSQL用户更多权限是没问题的。而在生产实例中,可以使用--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的源代码。我们指定了单个分支,因为只需要17.0版本的分支。我们还使用--depth 1
避免下载完整的提交历史记录。这些选项将非常快速地下载源代码,但读者也可以省略这些选项。
Odoo开发者还提供夜间构建版本,有tarball和发行包。使用git clone的主要优势是,当源代码中提交了新的bug修复时,可直接更新代码库。还可以轻松测试所有提交的修复并跟踪回退,从而让您的bug报告更准确及对开发更有帮助。
注:如果读者有企业版源代码的访问权限,可以将其下载到~/odoo-dev目录下的单独文件夹中。
虚拟环境
Python虚拟环境,简称venv,是独立的Python工作空间。对于Python开发者来说非常有用,因为它们允许不同工作空间安装不同版本的各种Python库,甚至使用不同的Python解释器版本。
可以使用python3 -m venv ~/newvenv命令创建任意数量的环境。这将在指定位置创建一个newvenv目录,包含bin/子目录和lib/python3.10子目录。
在第7步中,我们在~/venv-odoo-17.0目录中新建了一个虚拟环境。这将是Odoo的独立Python环境,Odoo的所有Python依赖项都会安装在此环境中。
我们使用source命令启用虚拟环境。如使用source ~/venv-odoo-17.0/bin/activate命令来激活虚拟环境。
安装Python包
Odoo的源代码在requirements.txt中列出了Python依赖项。在第8步中,我们通过pip3 install命令安装了所有这些依赖项。
现在,就可以运行Odoo实例了。
启动实例
到了读者所期待的时刻。在第9步中,我们使用odoo-bin脚本新建了一个空数据库,然后使用以下命令启动Odoo实例:
1 |
python3 odoo-bin -d odoo-test -i base --addons-path=addons --db-filter=odoo-test$ |
也可以省略python3,通过在odoo-bin前使用./来执行它,因为它是一个可执行的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安装可以服务于多个实例,这些实例W位于不同的数据库中,此参数限定可用数据库。后接的$非常重要,因为正则表达式在匹配模式下使用。这能够避免选择以指定字符串开头的名称。--addons-path=directory1,directory2,...
: 这是一个逗号分隔的目录列表,Odoo将在这些目录中查找插件模块。此列表在实例创建时扫描以获取实例中可用插件模块的列表。如果想使用Odoo的企业版,请使用此选项添加其目录。-i base
: 用于安装基础模块。通过命令行创建数据库时需要此选项。
如果使用的数据库用户与您的Linux登录名不同,则需要传递以下参数:
--db_host=localhost
: 使用TCP连接数据库服务--db_user=database_username
: 使用指定的数据库登录名--db_password=database_password
: 这是验证PostgreSQL服务的密码
请使用--help
参数获取所有可用选项的总览。我们将在本章稍后用到更多的odoo-bin脚本。
当Odoo在一个空数据库上启动时,它将创建支持其操作所需的数据库结构。还将扫描插件模块路径以查找可用的插件模块并插入一些初始记录到数据库中。这包括默认密码为admin的admin用户,我们将使用该用户进行身份验证。
在浏览器中访问http://localhost:8069/,进入新创建实例的登录页面,如下图所示:
图1.2 – Odoo实例的登录界面
这是因为 Odoo 内置了一个 HTTP 服务器。默认情况下,它监听所有本地网络接口上的 TCP 端口 8069。
管理 Odoo 服务器数据库
在使用 Odoo 时,实例中的所有数据都存储在 PostgreSQL 数据库中。可以使用所有常见的数据库管理工具,但 Odoo 也提供了一个用于某些常见操作的 Web 界面。
准备工作
假设读者工作环境已配置完毕,并且有一个正在运行的实例。
如何操作…
Odoo 数据库管理界面提供了创建、复制、删除、备份和恢复数据库的工具。还可以更改主控密码,用于保护数据库管理界面的访问。
访问数据库管理界面
请执行以下步骤访问数据库:
- 进入实例的登录界面(如果你已登录,请先登出)。
- 点击“管理数据库”。会进入到 http://localhost:8069/web/database/manager (也可以直接在浏览器访问该 URL):
图 1.3 – 数据库管理器
设置或更改主控密码
如果使用默认值配置了实例并且尚未修改,就像我们在下面部分讲解的那样,数据库管理界面将显示一个警告,告诉你未设置主控密码实例,并建议直接通过链接设置一个主控密码:
图 1.4 – 主控密码警告
要设置主密码,请执行以下步骤:
- 点击“设置主控密码”按钮。读者将看到一个对话框,要求你填写新主控密码字段:
图 1.5 – 设置新主控密码 - 输入一个复杂的新密码并点击继续。
- 如果已经设置主控密码,点击屏幕底部的设置主控密码按钮进行更改。在打开的对话框中,输入之前的主控密码和新密码,然后点击继续:
图 1.6 – 更改主控密码
注:主控密码在服务器配置文件中对应 admin_passwd 字段。如果服务器在未指定配置文件启动,将在 ~/.odoorc 中生成一个新的配置文件。有关配置文件的更多信息,请参阅下一部分的小节。
新建数据库
此对话框可用于创建由当前 Odoo 服务器处理的新数据库实例。按照以下步骤操作:
- 在数据库管理界面,点击底部的创建数据库按钮。将显示以下对话框:
图 1.7 – 创建数据库对话框 - 填写表单,内容如下:
-
- 主控密码:这是此实例的主控密码。
- 数据库名称:希望创建的数据库的名称。
- Email:在此添加你的电子邮件地址;这是稍后使用的用户名。
- 密码:输入希望为新实例的管理员用户设置的密码。
- 电话号码:设置你的电话号码(可选)。
- 语言:在下拉列表中选择你希望在新数据库中默认安装的语言。Odoo 将自动加载所选语言的翻译。
- 国家:在下拉列表中选择主公司的国家。选择此项将自动配置一些内容,包括公司的币种。
- 演示数据:选中此框以获取演示数据。这对于进行交互测试或为客户演示很有用,但不应对用于包含生产数据的数据库选中此项。
注:如果希望使用数据库运行模块的自动化测试(请参阅第7章 调试模块),则需要演示数据,因为 Odoo 中绝大多数自动化测试都依赖于这些记录才能成功运行。
-
- 点击继续并等待新数据库初始化。完成后,会被重定向到实例并以管理员身份连接。
故障排除
如果你被重定向到登录屏幕,可能是因为 Odoo 传递了 --db-filter
选项,新数据库名称未匹配过滤器选项。请注意,odoo-bin start命令会默默地执行此操作,使当前数据库可用。要解决此问题,只需不使用start命令重新启动 Odoo,参见源代码安装 Odoo一节。如果有配置文件(参阅本章后面的将实例配置存储在文件中一节),请确保 db_filter 选项未设置或设置为匹配新数据库名称的值。
复制数据库
通常,你会有一个现有的数据库,并希望对其进行试验以尝试某个流程或进行测试,但不修改现有数据。解决方案很简单:复制数据库并在副本上进行测试,根据需要重复此操作:
- 在数据库管理界面,点击你希望克隆的数据库名称旁的复制数据库链接:
图 1.8 – 复制数据库对话框 - 填写表单,内容如下:
- 主控密码:这是 Odoo 服务器的主控密码
- 新名称:希望为副本命名的名称
- 点击继续。
- 然后可以在数据库管理界面上点击新创建的数据库名称,访问该数据库的登录界面。
删除数据库
完成测试后,可能需要清理复制的数据库。执行以下步骤:
- 在数据库管理界面,可发现数据库名称旁边的删除按钮。点击它将显示以下对话框:
图 1.9 – 删除数据库对话框 - 填写表单,以及主控密码字段,这是 Odoo 服务的主控密码。
- 点击删除。
注意!数据丢失风险!
如果你选错了数据库且没有备份,则无法恢复丢失的数据。
备份数据库
执行以下步骤创建备份:
- 在数据库管理界面,可找到数据库名称旁的备份按钮。点击它将显示以下对话框:
图 1.10 – 备份数据库对话框 - 填写表单,内容如下:
- 主控密码:这是 Odoo 服务的主密码。
- 备份格式:对生产数据库保持使用 zip,因为这是唯一真正的完整备份格式。仅在不关心文件存储时为开发数据库使用 pg_dump 格式。
- 点击备份。备份文件将通过浏览器下载。
还原数据库备份
如需还原备份,请按以下步骤操作:
-
- 在数据库管理界面,可找到屏幕底部的还原数据库按钮。点击它将显示以下对话框:
图 1.11 – 还原数据库对话框 - 填写表单,内容如下:
- 主控密码:这是 Odoo 服务的主控密码。
- 文件:这是之前下载的 Odoo 备份。
- 数据库名称:提供要还原的数据库名称。该数据库在服务上必须不存在。
- 该数据库可能已移动或复制:如果原始数据库在另一台服务器上或已从当前服务器删除,选择该数据库已移动。否则,选择该数据库是副本,这是默认的安全选项。
- 点击继续。
注意:无法在其自身之上恢复数据库。如果这么做,会收到错误消息(数据库恢复错误:数据库已存在)。你需要先删除数据库。
- 在数据库管理界面,可找到屏幕底部的还原数据库按钮。点击它将显示以下对话框:
工作原理…
以上功能,除了更改主密码外,都会在服务器上运行 PostgreSQL 管理命令,并通过 Web 界面返回结果。
主控密码是一条非常重要的信息,只存在于 Odoo 服务器配置文件中,永远不会存储到数据库中。曾经有一个默认值 admin,但使用此值存在安全隐患。在 Odoo v9 及更高版本中,这被视为未设置的主控密码,在访问数据库管理界面时,系统会提醒你更改它。即使它存储在配置文件中的 admin_passwd 字段下,也与 admin 用户的密码不同;它们是两个独立的密码。主控密码是为一个 Odoo 服务器进程设置的,该进程本身可以处理多个数据库实例,每个实例都有一个独立的 admin 用户及单独的密码。
安全注意事项
请注意,我们在本章中考虑的是开发环境。Odoo 数据库管理界面是需要在生产服务器上加以保护的,因为它提供了大量敏感信息的访问权限,特别是在服务器托管了多个不同客户的 Odoo 实例时。
要创建新数据库,Odoo 使用 PostgreSQL createdb 工具并调用内部 Odoo 函数以在空数据库上启动 Odoo 时相同的方式初始化新数据库。
要复制数据库,Odoo 使用 createdb 的 --template
选项,传递原始数据库作为参数。这会使用内部和优化的 PostgreSQL 例程将模板数据库的结构复制到新数据库中,比创建备份再还原要快得多(特别是在使用 Web 界面时,因为需要先下载备份文件并再次上传)。
备份和还原操作分别使用 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 脚本有几十个选项,记住所有选项以及在启动服务器时正确配置它们是烦琐的。所幸,可以将它们全部存储在配置文件中,只需为开发配置需更改的选项。
如何操作…
本节中执行如下步骤
- 要生成 Odoo 实例的配置文件,请运行以下命令:
1$ ./odoo-bin --save --config myodoo.cfg --stop-after-init - 可以添加其他选项,其值将保存在生成的文件中。所有未配置的选项将保留其默认值。要获取可能选项的列表,请使用以下命令:
1$ ./odoo-bin --help | less
这将提供有关各种选项执行的帮助。 - 要将命令行形式转换为配置形式,使用长选项名称,去掉前导破折号,并将中间杠转换为下划线。比如,
--without-demo
会变成 without_demo。这适用于大多数选项,但有少数例外,所有例外均列在下一节中讲到。 - 编辑 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.1 – Odoo 参数在命令行和配置文件中的差异
以下是通过配置文件常设置的选项列表:
选项 | 格式 | 用途 |
---|---|---|
without_demo | 逗号分隔的模块名列表 | 该选项阻止模块演示数据被加载。 all(取消所有模块的演示数据),或 False(为所有模块启用演示数据)。通过提供模块名称禁用具体模块,如 sale,purchae,crm。 |
addons_path | 逗号分隔的路径列表 | 这是一个服务查找插件的路径名列表 |
admin_passwd | 文本 | 这是主控密码(参见前面部分的内容) |
data_dir | 一个目录路径 | 这个目录中服务会存储session信息、从网上下载的插件以及在启用了文件存储时存放文档。 |
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.2 – Odoo 参数及其用法
以下是与数据库相关的配置选项列表:
选项 | 格式 | 用途 |
---|---|---|
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.3 – Odoo 参数及其用法
Odoo 使用 Python ConfigParser 模块解析配置文件。然而,在 Odoo 11.0 的实现中发生了改变,不能再使用变量插值。所以,如果读者习惯于使用 %(section.variable)s
表示法通过其他变量的值定义变量值,需要改变这个习惯并使用显式值。
某些选项不在配置文件中使用,但在开发过程中广泛使用:
选项 | 格式 | 用途 |
---|---|---|
-i或--init | 逗号分隔的模块名列表 | 它会在初始化数据库时默认安装给定的模块 |
-u 或-update | 逗号分隔的模块名列表 | 它会在重启服务时更新给定的模块。多在修改了源代码或从 git 更新了分支时使用 |
--dev | all, reload, qweb, werkzeug, xml | 这会启用开发者模式及自动重新加载功能。 |
表 1.4 – Odoo 参数及其用法
启用 Odoo 开发者工具
开发者使用 Odoo 时,需要知道如何在 Web 界面中启用开发者模式,以便访问技术设置菜单和开发者信息。启用调试模式将暴露一些高级配置选项和字段,这些选项和字段在 Odoo 中默认隐藏以提高可用性,因为它们并不是日常使用的。
如何操作…
要在 Web 界面中激活开发者模式,请执行以下步骤:
- 连接到实例并以管理员身份登录。
- 进入设置菜单。
- 滚动到底部,找到开发者工具部分:
图 1.12 – 启用不同开发者模式的链接 - 点击启用开发者模式。
- 等待 UI 重新加载。
其它方式
还可以通过编辑 URL 来启用开发者模式。在 URL 中的 # 符号前插入 ?debug=1
。例如,如果当前的 URL 是 http://localhost:8069/web#menu_id=102&action=94
,如想启用开发者模式,则需要将 URL 更改为 http://localhost:8069/web?debug=1#menu_id=102&action=94
。此外,如果你想使用带静态资源的调试模式,则将 URL 更改为 http://localhost:8069/web?debug=assets#menu_id=102&action=94
。
退出开发者模式,可以执行以下任一操作:
- 编辑 URL 并在查询字符串中写入
?debug=0
- 在设置菜单中的相同位置使用停用开发者模式
- 点击顶部菜单中的bug图标,然后点击离开开发者工具选项
很多开发人员使用浏览器插件来切换调试模式。这样可以快速切换调试模式而无需访问设置菜单。这些插件适用于 Firefox 和 Chrome。以下截图显示了可以使用 Chrome 商店中找到的一个插件:
图 1.13 – 用于调试模式的浏览器插件
注:自 Odoo v13 起,调试模式发生了变化。从 v13 起,调试模式的状态存储在会话中,这意味着即使从 URL 中移除了 ?debug
,调试模式仍会处于激活状态。
工作原理…
在开发者模式下,会发生两件事:
- 将鼠标悬停在表单视图中的字段上或列表视图中的列上时,会出现提示消息。这些提示提供了关于该字段的技术信息(内部名称、类型等)。
- 用户菜单旁会显示一个带有bug图标的下拉菜单,可以访问到显示模型的技术信息、各种相关视图定义、工作流、自定义过滤器管理等。
还有一种开发者模式,称为开发者模式(含资源)。此模式与普通开发者模式类似,但发送到浏览器的 JavaScript 和 CSS 代码不会被压缩,这意味着可以更轻松地使用浏览器的 Web 开发工具来调试 JavaScript 代码(更多内容请参见第15章 Web 客户端开发)。
警告!
在非开发者模式下测试你的插件,因为 JavaScript 库的未压缩版本可能会隐藏只有在压缩版本中才会出现的错误。
更新插件模块列表
当添加新插件模块时,需要运行更新模块列表向导将新应用程序添加到应用列表中。本节中,读者将学习如何更新应用列表。
准备工作
启动实例并使用管理员账户登录。然后启用开发者模式(如果你不知道如何启用开发者模式,请参考启用 Odoo 开发者工具一节)。
如何操作…
要更新实例中可用插件模块的列表,请执行以下步骤:
- 打开Apps菜单。
- 2. 点击更新应用列表:
图 1.14 – 更新应用列表 - 在出现的对话框中点击更新:
图 1.15 – 更新应用列表的对话框 - 更新完成后,可点击Apps查看更新后的可用插件模块列表。需要在搜索框中移除默认的Apps过滤器查看所有模块。
工作原理…
点击更新按钮时,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 服务后,可以通过App菜单安装/更新模块。