Odoo 12開發(fā)者指南(Cookbook)第一章 安裝Odoo開發(fā)環(huán)境

全書完整目錄請見:Odoo 12開發(fā)者指南(Cookbook)第三版

本章中捉偏,我們將講解如下主題:

  • Odoo生態(tài)系統(tǒng)
  • 從源碼輕松安裝Odoo
  • 使用start命令管理Odoo環(huán)境
  • 管理Odoo服務(wù)端數(shù)據(jù)庫
  • 在一個文件中存儲實(shí)例配置
  • 激活Odoo開發(fā)者工具
  • 從源碼更新Odoo

簡介

有很多的方式來設(shè)置Odoo開發(fā)環(huán)境呆细。本章中采用了其中的一種,你一定可以在網(wǎng)上找到其它的教程講解其它方法桃序。請記住本章中為開發(fā)環(huán)境煞肾,與生產(chǎn)環(huán)境的要求是不同的歇盼。關(guān)于生產(chǎn)環(huán)境會在第三章 服務(wù)器部署中講解。

如果你是一個Odoo開發(fā)新手湃交,必須要了解Odoo生態(tài)的某些方面。下一部分會給出這些方面的簡短介紹藤巢,然后我們就會進(jìn)入到開發(fā)用的Odoo的安裝搞莺。

Odoo生態(tài)系統(tǒng)

Odoo為開發(fā)者提供了開箱即用的模塊結(jié)構(gòu)。它強(qiáng)大的框架有助于開發(fā)者很快地創(chuàng)建項(xiàng)目掂咒。在開始成為成功的Odoo開發(fā)者之旅以前才沧,Odoo生態(tài)中有一些你應(yīng)該要熟悉的特性。

Odoo版本

Odoo有兩個版本绍刮。第一個是社區(qū)版温圆,完全開源,第二是企業(yè)版孩革,需要授權(quán)證書費(fèi)用岁歉。不同于其它軟件供應(yīng)商,Odoo企業(yè)版僅僅是在社區(qū)版基礎(chǔ)上添加了一些附加特性/應(yīng)用的高級應(yīng)用嫉戚∨亳桑基本上,企業(yè)版運(yùn)行于社區(qū)版之上彬檀。社區(qū)版采用Lesser General Public License v3.0 (LGPLv3)許可證書帆啃,并帶有企業(yè)版企業(yè)資源計劃(ERP)的所有基礎(chǔ)應(yīng)用,如銷售窍帝、客戶關(guān)系管理(CRM)努潘、發(fā)票、采購、網(wǎng)站構(gòu)建器等等疯坤。而企業(yè)版采用 Odoo 企業(yè)版許可證書报慕,這是一個自有證書。Odoo 企業(yè)版帶有高級功能如完整的財務(wù)压怠、studio眠冈、基于IP的語音傳輸(VoIP)菌瘫、移動端響應(yīng)式設(shè)計蜗顽、電子簽名、營銷自動化和快遞與銀行的集成雨让。企業(yè)版還為你提供無限的漏洞修復(fù)雇盖。下圖顯示企業(yè)版依賴于社區(qū)版,這也是為什么你需要社區(qū)版來使用企業(yè)版:

你可以通過https://www.odoo.com/page/editions查看這兩個版本的完整對比栖忠。

??Odoo有最大數(shù)量的社區(qū)開發(fā)人員崔挖,這也是你在應(yīng)用商店中看到有大量的第三方應(yīng)用(模塊)的原因。大部分免費(fèi)應(yīng)用使用Affero General Public License version 3 (AGPLv3)許可證書庵寞。如果你的應(yīng)用依賴于這些應(yīng)用就不能使用其自有證書狸相。Odoo自有證書的應(yīng)用僅能在擁有LGPL或其它自有證書的模塊基礎(chǔ)上進(jìn)行開發(fā)。

Git倉庫

Odoo的完整代碼托管在GitHub上皇帮。你可以在這里對穩(wěn)定版提交漏洞/問題卷哩。你還可以通過提交拉取請求(Pull Request - PR)來提議添加新功能。Odoo有許多個倉庫属拾,參見下表來獲取更多信息:

倉庫 用途
https://github.com/odoo/odoo 這是 Odoo 的社區(qū)版将谊。對公眾開放。
https://github.com/odoo/enterprise 這是 Odoo 的企業(yè)版渐白。僅對Odoo 官方合作伙伴開放尊浓。
https://github.com/odoo-dev/odoo 這是不斷開發(fā)中的倉庫。對公眾開放纯衍。

每年栋齿,Odoo會發(fā)布一個大版本(長期支持(LTS)版本)和幾個小版本。小版本多用于Odoo的在線SaaS服務(wù)襟诸,表示Odoo的SaaS用戶可以更早地使用這些功能瓦堵。GitHub 上大版本分支的名稱像12.0, 11.0和10.0,而小版本分支名稱有saas-12.1, saas-11.1和saas-11.2歌亲。master分支處于開發(fā)中菇用,并隨時可能發(fā)生改變。因此陷揪,不建議在生產(chǎn)環(huán)境中使用它惋鸥,因?yàn)樗赡軐?dǎo)致數(shù)據(jù)庫的崩潰杂穷。

Runbot

Runbot是Odoo的自動化測試環(huán)境。這會從Odoo的Git倉庫拉取最新分支并創(chuàng)建最近4個提交的構(gòu)建卦绣。這里耐量,你可以測試所有的穩(wěn)定版和開發(fā)中分支。你甚至可以使用企業(yè)版并測試它的開發(fā)分支滤港。

每個構(gòu)建有不同的背景色廊蜒,表明測試用例的狀態(tài)。綠色背景表示所有的測試用例成功運(yùn)行溅漾,你可以測試該分支劲藐,而紅色背景表示在這個分支上有些測試用例出錯了,有些功能在該構(gòu)建上可能崩潰了樟凄。你可以查看所有測試用例的日志,會顯示在安裝過程中所發(fā)生的具體事項(xiàng)兄渺。每個構(gòu)建有兩個數(shù)據(jù)庫缝龄。數(shù)據(jù)庫all安裝了所有的模型,而數(shù)據(jù)庫base僅安裝了基本的Odoo模塊挂谍。每個構(gòu)建安裝了基本演示數(shù)據(jù)叔壤,因此你可以快速進(jìn)行測試而無需額外的配置。

??你使用如下 URL 來訪問runbot:http://runbot.odoo.com/runbot

以下賬戶信息可用于訪問任一runbot構(gòu)建:

  • 登錄ID: admin 密碼: admin
  • 登錄ID:demo 密碼: demo
  • 登錄ID: portal 密碼: portal

??這是公共測試環(huán)境口叙,因此有時可能會有其它用戶使用/測試你所測試的相同分支炼绘。

Odoo應(yīng)用商店

Odoo幾年前發(fā)布了應(yīng)用商店,當(dāng)時就獲得了成功⊥铮現(xiàn)在俺亮,那里托管著15,000多個不同的應(yīng)用。在應(yīng)用商店中疟呐,你可以找到大量的針對不同版本的免費(fèi)和付費(fèi)應(yīng)用脚曾。這包含不同垂直業(yè)務(wù)領(lǐng)域的具體解決方案,如教育启具、食品行業(yè)和醫(yī)藥業(yè)本讥。它還包含一些繼承了已有Odoo應(yīng)用或添加了新功能的應(yīng)用。應(yīng)用商店還為Odoo網(wǎng)站構(gòu)建器提供了大量的美觀的主題鲁冯。在第四章 創(chuàng)建Odoo插件模塊中拷沸,我們將來看如何為你的自定義模塊設(shè)置價格和幣種。

你可以通過如下鏈接訪問Odoo應(yīng)用商店:https://www.odoo.com/apps薯演。

Odoo社區(qū)聯(lián)盟(OCA)

Odoo社區(qū)聯(lián)盟(OCA)是一個開發(fā)/管理Odoo社區(qū)模塊的非營利組織撞芍。所有的OCA模塊都開源并由Odoo社區(qū)成員維護(hù)。在OCA的GitHub中涣仿,你會發(fā)現(xiàn)針對不同Odoo應(yīng)用的多個倉庫勤庐。除Odoo模塊外示惊,它還包含很多工具、一個遷移庫愉镰、會計本地化等等周拐。

以下是OCA官方GitHub賬戶的URL:https://github.com/OCA怕磨。

官方Odoo幫助論壇

Odoo 有一個非常強(qiáng)大的框架,大量的事只需通過使用/激活選項(xiàng)或遵循指定的模式即可實(shí)現(xiàn)。因此沪悲,如果你碰到了一些技術(shù)問題或如果你對一些復(fù)雜用例不確定,那么你就可以在Odoo官方幫助論壇上提交問詢脖苏。這個論壇上有大量活躍的開發(fā)人員方灾,包含一些Odoo官方的員工。

你可以在如下 URL 上搜索或提交你的問題:https://help.odoo.com/讼渊。

從源碼輕松安裝Odoo

推薦使用GNU/Linux環(huán)境來部署Odoo动看。你可能更習(xí)慣于使用Microsoft Windows或Mac OS X,但事實(shí)上大部分的Odoo開發(fā)人員都使用GNU/Linux爪幻,使用GNU/Linux而非Windows你也更有機(jī)會獲取操作系統(tǒng)級別問題的社區(qū)支持菱皆。

也推薦使用和生產(chǎn)環(huán)境相同的環(huán)境(相同發(fā)行版和版本號)進(jìn)行開發(fā)。這樣可以避免討厭的“彩蛋”挨稿,比如在部署當(dāng)天發(fā)現(xiàn)有個庫有一個預(yù)料外的版本仇轻,會有一些不同和不兼容的問題。如果你的工作站使用不同的操作系統(tǒng)奶甘,一個好的方法是在工作站上設(shè)置虛擬機(jī)(VM)并在 VM 上安裝 GNU/Linux發(fā)行版篷店。

小貼士:避免在運(yùn)行開發(fā)環(huán)境的工作站和運(yùn)行 Odoo 的虛擬機(jī)之間拷貝文件,你可以在VM中配置一個SAMBA共享并將源碼存儲在那里臭家。然后在你的工作站上掛載該共享目錄來輕松的編輯文件疲陕。

本書假定你運(yùn)行 Debian GNU/Linux的穩(wěn)定版(在寫本書時為版本9,代號Stretch)侣监。Ubuntu是另一個常用的選擇鸭轮,因?yàn)樗菢?gòu)建在Debian之上的,本書中大部分的示例應(yīng)該都不需要進(jìn)行修改即可在其上運(yùn)行橄霉。不論你選擇哪個Linux發(fā)行版窃爷,你都應(yīng)該要有一個從命令行使用它的概念,有系統(tǒng)運(yùn)維相關(guān)知識顯然也沒有什么壞處姓蜂。

準(zhǔn)備工作

我們假定你已運(yùn)行了Linux并因擁有 root 密碼或配置了 sudo 而擁有root訪問權(quán)限按厘。下面的部分中,我們將在命令行中需要你的工作用戶的登錄名時使用$(whoami)钱慢。這是代替你輸入命令的登錄用戶的shell命令逮京。

譯者注:Debian 的安裝請參見Odoo 12開發(fā)者指南補(bǔ)充知識

如果你有GitHub賬戶的話有些操作一定會更容易。如果你尚未擁有GitHub賬戶束莫,請訪問https://github.com并創(chuàng)建賬戶懒棉。

如何安裝...

使用源碼安裝 Odoo草描,需要按照如下的步驟:

譯者注:如需使用Python 3.6請參照Odoo 12開發(fā)者指南補(bǔ)充知識,另 Alan 也按照下面的命令制作了一個安裝腳本@GitHub

  1. 運(yùn)行如下命令來安裝主要依賴
$ sudo apt-get update
    $ sudo apt-get install -y git python3.5 postgresql nano \
    virtualenv xz-utils wget fontconfig libfreetype6 libx11-6 \
    libxext6 libxrender1 xfonts-75dpi
> ??Odoo v12的樣式預(yù)處理由less變成了scss策严。因此穗慕,如果你使用12以下的版本,那么你需要安裝node-less node-clean-css來獲取正確的樣式妻导。
  1. 下載并安裝wkhtmltopdf:
$ wget -O wkhtmltox.tar.xz \
    https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.4/wkhtmltox-0.12.4_linux-generic-amd64.tar.xz
    $ tar xvf wkhtmltox.tar.xz
    $ sudo mv wkhtmltox/lib/* /usr/local/lib/
    $ sudo mv wkhtmltox/bin/* /usr/local/bin/
    $ sudo mv wkhtmltox/share/man/man1 /usr/local/share/man/

    # 譯者補(bǔ)充:當(dāng)前官方推薦的版本為0.12.5逛绵,可通過如下命令進(jìn)行安裝
    $ wget "https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox_0.12.5-1.xenial_amd64.deb" -O /tmp/wkhtml.deb
    $ sudo dpkg -i /tmp/wkhtml.deb
    $ sudo apt-get -fy install
  1. 現(xiàn)在,使用如下命令來安裝構(gòu)建依賴:
$ sudo apt-get install -y gcc python3.5-dev libxml2-dev \
    libxslt1-dev libevent-dev libsasl2-dev libssl1.0-dev libldap2-dev \
    libpq-dev libpng-dev libjpeg-dev
  1. 配置PostgreSQL
$ sudo -u postgres createuser --createdb $(whoami)
    $ createdb $(whoami)
  1. 配置git(以下信息請自行修改):
$ git config --global user.name "Your Name"
    $ git config --global user.email youremail@example.com
  1. 克隆 Odoo 基礎(chǔ)代碼:
$ mkdir ~/odoo-dev
    $ cd ~/odoo-dev
    $ git clone -b 12.0 --depth 1 --single-branch https://github.com/odoo/odoo.git
    $ cd odoo
**譯者注:**建議像上面這樣在原文的基礎(chǔ)上添加--depth 1倔韭,否則將下載2G多的文件术浪,國內(nèi)網(wǎng)絡(luò)環(huán)境耗時會非常久
  1. 創(chuàng)建一個odoo-12.0 虛擬環(huán)境并激活它:
$ virtualenv -p python3 ~/odoo-12.0
    $ source ~/odoo-12.0/bin/activate
  1. 在virtualenv中安裝Odoo的Python依賴:
$ pip3 install -r requirements.txt
  1. 創(chuàng)建并啟動你的第一個Odoo實(shí)例:
$ createdb odoo-test
    $ python3 odoo-bin -d odoo-test --addons-path=addons \
    --db-filter=odoo-test$
**譯者注:**初次啟動可能會需要添加-i base參數(shù)來初始化數(shù)據(jù)庫
  1. 在瀏覽器中訪問http://localhost:8069(虛擬機(jī)請修改為對應(yīng)的 IP 地址),并使用admin賬戶和密碼admin來進(jìn)行登錄

譯者注:此處省略小貼士關(guān)于下載代碼相關(guān)內(nèi)容寿酌,在翻譯和實(shí)操的過程中胰苏,Alan 會將相關(guān)代碼上傳到 GitHub

運(yùn)行原理...

依賴來自不同的數(shù)據(jù)源。首先醇疼,你需要Odoo的核心依賴碟联、Python解釋器用于運(yùn)行源代碼,PostgreSQL數(shù)據(jù)庫服務(wù)用于存儲實(shí)例數(shù)據(jù)僵腺。Git用于源碼版本控制以及獲取Odoo本身的源代碼。

??在11.0之前壶栋,Odoo的各版本以Python 2.7進(jìn)行運(yùn)行辰如。從Odoo 11.0開始,支持的Python最小版本為3.5贵试。Python的這兩版本并不兼容琉兜,因此在Python 2.7上運(yùn)行的模塊(Odoo 9.0或10.0)會要求移植為符合Odoo 11.0 以及Python 3的具體要求。

因?yàn)槲覀冃枰诜?wù)器上以root或postgres(PostgreSQL的管理用戶)編輯一些文件毙玻,我們需要安裝一個基本控制臺的文本編輯器豌蟋。我們推薦使用nano,因?yàn)樗褂蒙戏浅:唵紊L玻堊杂蛇x擇你自己所喜歡的編輯器梧疲,只要能在Console中使用即可。例如运准,你可以使用vim, e3或emacs-nox幌氮。

Wkhtmltopdf是Odoo的一個運(yùn)行時依賴,用于生成PDF報告胁澳。Odoo 12.0所要求的版本為0.12.4该互,在當(dāng)前的GNU/Linux發(fā)行版中并沒有包含。所幸wkhtmltopdf的維護(hù)者提供對不同發(fā)行版的預(yù)構(gòu)建包韭畸,地址為http://wkhtmltopdf.org/downloads.html.

有很多其它的運(yùn)行時依賴為Python模塊宇智,我們可以在虛擬環(huán)境中使用pip3進(jìn)行安裝蔓搞。但是,其中一些Python模塊會包含對原生C語言庫的依賴随橘,Python綁定需要它來進(jìn)行編譯喂分。因此,我們安裝了這些C語言庫的開發(fā)包以及Python開發(fā)包和C編譯器太防。在安裝了這些構(gòu)建依賴之后妻顶,我們就可以使用pip3 install -r requirements.txt(Odoo源代碼中的一個文件)來下載、編譯和安裝這些Python模塊了蜒车。

虛擬環(huán)境

Python虛擬環(huán)境或簡稱virtualenv讳嘱,是隔離的Python工作空間。這些對于Python開發(fā)者非常有用酿愧,因?yàn)樗鼈冊试S安裝不同Python解釋器版本上不同版本Python庫的不同工作空間沥潭。

你可以使用virtualenv -p python3 path/to/newenv命令來創(chuàng)建所需數(shù)量的環(huán)境。這會在指定位置創(chuàng)建一個newenv目錄嬉挡,其中包含一個bin/子目錄和一個lib/python3.5(譯者注:或你安裝的其它 Python 3版本)子目錄钝鸽。請記得加上-p python3,不加的話你有可能會創(chuàng)建一個Python 2.7的虛擬環(huán)境庞钢,那就無法運(yùn)行Odoo 12.0了拔恰。

在bin/目錄,你會發(fā)現(xiàn)一些腳本:

  • activate:這腳本不被執(zhí)行基括,由內(nèi)置的source命令來進(jìn)行加載颜懊。這會通過調(diào)整PATH環(huán)境變量來包含virtualenv的bin/目錄來激活該環(huán)境。它還會安裝名為的deactivate的shell函數(shù)风皿,通過運(yùn)行它可以退出virtualenv河爹,并通過改變shell提示符來告訴你virtualenv當(dāng)前已激活。
  • pip3:這是pip3的一特殊版本桐款,僅在virtualenv中生效咸这。
  • python3:這是對系統(tǒng)的Python解釋器的封裝,它使用在virtualenv中已安裝的包魔眨。

??shell內(nèi)置的source命令也可使用 . (單個點(diǎn)媳维,接空格和要進(jìn)行source的文件路徑)。這表示你可以使用 . ~/odoo-12.0/bin/activate 來代替source ~/odoo-12.0/bin/activate遏暴。簡寫形式完全沒有問題侨艾,但本書將出于易讀性的考慮保持使用source。

使用virtualenv有兩種主要方法拓挥。你可以像前例中那樣激活它(并在完成后調(diào)用deactivate)唠梨,或者你可以顯式地使用該環(huán)境下bin/目錄中的腳本來以完整路徑進(jìn)行調(diào)用,這樣你無需激活virtualenv腳本侥啤。這是一個偏好問題当叭,你應(yīng)該通過嘗試來看哪種方式更適合你茬故。

你可以在第一行放上可執(zhí)行Python腳本。應(yīng)該會是這樣:

#! /usr/bin/env python3

通過一個激活的virtualenv腳本這些會更易于使用蚁鳖。

odoo-bin腳本就屬于這種情況磺芭,你可以通過如下方式來進(jìn)行調(diào)用:

$ ./odoo-bin -d odoo-test --addons-path=addons --db-filter=odoo-test

PostgreSQL配置

在GNU/Linux系統(tǒng)中,Odoo使用psycopg2 Python庫來與PostgreSQL數(shù)據(jù)庫進(jìn)行連接醉箕。Odoo可以使用默認(rèn)值非常好地運(yùn)作钾腺,這些默認(rèn)值用于通過psycopg2訪問PostgreSQL數(shù)據(jù)庫。它使用如下的默認(rèn)值:

  • 默認(rèn)psycopg2嘗試使用本地連接的當(dāng)前用戶相同的用戶名來連接數(shù)據(jù)庫讥裤,這會啟動無密碼認(rèn)證
  • 本地連接使用Unix域套接字
  • 數(shù)據(jù)庫服務(wù)監(jiān)聽5432端口

這里沒什么特別的要做放棒,因此我們只是使用了postgres管理員用戶創(chuàng)建了一個與系統(tǒng)當(dāng)前用戶相同的用戶名,并給其使用同名新用戶新建數(shù)據(jù)庫的權(quán)限己英。在我們使用psql命令時這會被用作默認(rèn)數(shù)據(jù)庫间螟。

在開發(fā)服務(wù)器上,給予PostgreSQL用戶更多的權(quán)限并使用 --superuser命令行參數(shù)而不僅僅是--createdb沒有問題损肛。效果是該用戶可以創(chuàng)建其它用戶并可全局管理數(shù)據(jù)庫實(shí)例厢破。如果你覺得--superuser太過了,在創(chuàng)建你的數(shù)據(jù)庫用戶時仍可以在--createdb之外用--createrole治拿。在生產(chǎn)服務(wù)器上要避免這么做摩泪,因?yàn)檫@會給予黑客在一些部署代碼中更多地利用漏洞的機(jī)會(參見第三章 服務(wù)器部署)。

如果你想使用不同的數(shù)據(jù)庫用戶劫谅,則需提供該用戶的密碼加勤。這通過在創(chuàng)建用戶時在命令行傳遞--pwprompt標(biāo)記來實(shí)現(xiàn),此時命令行會提示你輸入密碼同波。

如果用戶已存在而你又想要為其設(shè)置密碼(或修改一個已忘記的密碼),可以使用如下命令:

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

小貼士:如果這個命令執(zhí)行報錯提示數(shù)據(jù)庫不存在叠国,這是因?yàn)槟銢]按照操作步驟的第4步創(chuàng)建一個與當(dāng)前登錄名相同的數(shù)據(jù)庫未檩。不必?fù)?dān)心,僅需使用 --dbname選項(xiàng)來添加已有數(shù)據(jù)庫名粟焊,例如 --dbname template1冤狡。

Git配置

在本書的某些部分,你會需要使用git commit進(jìn)行提交项棠。必須要進(jìn)行一些基礎(chǔ)設(shè)置否則會報錯悲雳,你需要提供自己的Git用戶名和email地址。Git會很好的提示你這做香追,但你也可以現(xiàn)在就提前設(shè)置好合瓢。

??如果你使用一些諸如Travis或持續(xù)集成的服務(wù)這也是需要謹(jǐn)記于心的,你的測試腳本會需要執(zhí)行一些git合并透典。你需要提供一個名稱和email來讓合并成功執(zhí)行晴楔。

下載Odoo源碼

下載Odoo源代碼由git clone操作來執(zhí)行顿苇;保持耐心,這會花費(fèi)一些時間税弃。--branch 12.0 --single-branch選項(xiàng)會避免下載其它分支纪岁,節(jié)約一些時間。也可以使用--depth選項(xiàng)來避免下載整個倉庫歷史記錄则果,但該選項(xiàng)的缺點(diǎn)是你在查找問題時將無法去查看歷史記錄幔翰。

Odoo開發(fā)者還建議了nightly構(gòu)建,可以通過tarball和發(fā)行包進(jìn)行獲取西壮。使用git clone的主要優(yōu)勢在于在源代碼樹提交了新的漏洞修復(fù)時你可以更新自己的倉庫遗增。你也將可以輕松地測試所建議的修復(fù)并追蹤回退,這會讓你的漏洞報告更精確及對開發(fā)者更有幫助茸时。

啟動實(shí)例

到了你期待已久的時刻了贡定。要啟動我們的第一個實(shí)例,首先我們創(chuàng)建一個新的空數(shù)據(jù)庫可都,然后使用odoo-bin以及如下命令行參數(shù):

  • -d database_name:默認(rèn)使用這一數(shù)據(jù)庫缓待。
  • --db-filter=database_name:僅嘗試連接匹配所提供正則表達(dá)式的數(shù)據(jù)庫。一個Odoo安裝可以為使用不同數(shù)據(jù)庫的多個實(shí)例提供服務(wù)渠牲,通過這一參數(shù)限制可用的數(shù)據(jù)庫旋炒。最后的那個很重要,因?yàn)樵谄ヅ淠J街惺褂昧苏齽t表達(dá)式签杈,這會避免選擇以相同的指定字符串開頭的名稱瘫镇。
  • --addons-path=directory1,directory2,...:Odoo通過這一逗號分隔列表中的目錄來查找插件(add-on)。在實(shí)例創(chuàng)建的時候掃描該列表來添加實(shí)例中可用的插件模塊列表答姥。

如果你使用了與Linux當(dāng)前登錄用戶不同的數(shù)據(jù)庫用戶铣除,則需要再傳遞如下的參數(shù):

  • --db_host=localhost: 使用一個數(shù)據(jù)庫服務(wù)的 TCP連接
  • --db_user=database_username: 使用指定的數(shù)據(jù)庫登錄用戶
  • --db_password=database_password: 這是用于認(rèn)證PostgreSQL服務(wù)的密碼

使用--help可獲取所有可用選項(xiàng)的一個總覽。我們在本章后面及第二章 管理Odoo服務(wù)器實(shí)例中還會來了解odoo-bin腳本更多的知識鹦付。

Odoo在一個空數(shù)據(jù)庫上啟動時尚粘,它會首先創(chuàng)建一個支持其操作所需的數(shù)據(jù)庫結(jié)構(gòu)。它還會掃描插件路徑來查找可用的插件模塊敲长,并將一些內(nèi)容插入到數(shù)據(jù)庫的初始記錄中郎嫁。這包括admin用戶及默認(rèn)admin密碼,在登錄時你將需要使用祈噪。

Odoo包含一個HTTP服務(wù)器泽铛。默認(rèn),它監(jiān)聽TCP端口8069上的所有本地網(wǎng)絡(luò)接口辑鲤,因此在瀏覽器中訪問http://localhost:8069/譯者注:非本地請自行修改為 IP 地址)可以訪問到你所新創(chuàng)建的實(shí)例盔腔。

使用start命令管理Odoo環(huán)境

我們會經(jīng)常要在Odoo實(shí)例中用到自定義或社區(qū)模塊。將它們放在一個單獨(dú)的目錄中會讓為Odoo安裝升級或調(diào)試自定義模塊的問題更為簡單。我們只需將該目錄添加到插件路徑中铲觉,它們就可以同核心模塊一樣在實(shí)例中使用了澈蝙。

可以將這個模塊路徑看作一個Odoo環(huán)境。Odoo的start命令讓以目錄組織Odoo實(shí)例更為方便撵幽,每個目錄中包含自己的模塊灯荧。

準(zhǔn)備工作

這一節(jié)要求已安裝過 Odoo。我們假定代碼的目錄為~/odoo-dev/odoo并且已激活虛擬環(huán)境盐杂。

這表示運(yùn)行如下命令可以成功地啟動Odoo服務(wù):

>$ ~/odoo-dev/odoo/odoo-bin

如何啟動...

為你的實(shí)例創(chuàng)建一個工作環(huán)境逗载,需要按照如下步驟:

  1. 更改到Odoo所在目錄
$ cd ~/odoo-dev
  1. 選擇該環(huán)境的名稱并為其創(chuàng)建一個目錄:

$ mkdir my-odoo


3.  更改到這個目錄并為該環(huán)境啟動Odoo服務(wù)實(shí)例

    ```
$ cd my-odoo/
$ ../odoo/odoo-bin start

運(yùn)行原理...

Odoo的start命令是使用當(dāng)前目錄啟動服務(wù)實(shí)例的一個快捷方式。目錄名自動作為數(shù)據(jù)庫名(-d選項(xiàng))链烈,只要其包含Odoo插件模塊當(dāng)前目錄也自動插入到插件路徑(--addons-path選項(xiàng))中厉斟。在前面的操作步驟中,你不會看到插件路徑中有當(dāng)前目錄强衡,因?yàn)樗€不包含任何模塊擦秽。

??如果你在虛擬環(huán)境中使用start命令,它會使用虛擬環(huán)境的名稱來代替所處目錄名稱來作為數(shù)據(jù)庫名漩勤。但如果你不在虛擬環(huán)境中感挥,就會使用當(dāng)前目錄名。

更多內(nèi)容...

默認(rèn)使用當(dāng)前目錄越败,但--path選項(xiàng)允許你轉(zhuǎn)而設(shè)置一個具體的路徑來供使用触幼。例如,可在任何目錄下使用這條命令:

$ ~/odoo-dev/odoo/odoo-bin start --path=~/odoo-dev/my-odoo

所使用的數(shù)據(jù)庫也可以使用常用的-d 選項(xiàng)來進(jìn)行重選究飞。事實(shí)上置谦,所有其它的odoo-bin 常用命令行參數(shù)都可以使用,除--addons-path外亿傅。例如媒峡,使用如下命令來設(shè)置服務(wù)監(jiān)聽端口:

$ ../odoo/odoo-bin start -p 8080 -i base

可以看到,Odoo的start命令是以自己的模塊路徑快速啟動Odoo實(shí)例的一種很便捷的方式葵擎。

管理Odoo服務(wù)端數(shù)據(jù)庫

在使用Odoo時谅阿,你的實(shí)例所有的數(shù)據(jù)都存儲在PostgreSQL數(shù)據(jù)庫中。你習(xí)慣的所有標(biāo)準(zhǔn)數(shù)據(jù)庫管理工具都可以使用坪蚁,但Odoo為一些通過操作提供了一個網(wǎng)頁界面。

準(zhǔn)備工作

我們假定你的工作環(huán)境已設(shè)置镜沽,并且你已運(yùn)行了一個實(shí)例敏晤。不要使用前面操作中所介紹的odoo-bin start命令來啟動,因?yàn)檫@會使用一些牽涉到多數(shù)據(jù)庫管理選項(xiàng)的服務(wù)配置缅茉。

如何管理...

Odoo數(shù)據(jù)庫管理界面提供創(chuàng)建嘴脾、復(fù)制、刪除、備份和恢復(fù)數(shù)據(jù)庫的工具译打。還有一種修改master密碼的方式耗拓,用于保持對數(shù)據(jù)庫管理界面的訪問。

訪問數(shù)據(jù)庫管理界面

需要執(zhí)行如下步驟來訪問數(shù)據(jù)庫:

  1. 進(jìn)入實(shí)例的登錄頁面(如果已登錄請先登出)奏司。
  2. 點(diǎn)擊Manage Databases鏈接乔询。這會導(dǎo)航至http://localhost:8069/web/database/manager(你也可以在瀏覽器中直接訪問這個URL)。

設(shè)置或修改master密碼

如果你已經(jīng)以默認(rèn)值設(shè)置了實(shí)例且尚未像下面講解的那樣做過修改韵洋,數(shù)據(jù)庫管理頁面會顯示一條警告竿刁,告訴你還沒有設(shè)置master密碼并建議你通過點(diǎn)擊鏈接來進(jìn)行設(shè)置:

你需要執(zhí)行如下步驟來設(shè)置master:

  1. 點(diǎn)擊Set Master Password按鈕。會彈出一個對話框來要求你提供新的 master 密碼:


  2. 輸入一個復(fù)雜的新密碼并點(diǎn)擊Continue

如果已設(shè)置了master密碼搪缨,點(diǎn)擊頁面底部的Set Master Password按鈕來進(jìn)行修改食拜。在彈出的對話框中輸入老的master密碼再輸入新密碼,然后點(diǎn)擊Continue副编。

??master密碼是在admin_password鍵下的服務(wù)配置文件负甸。如果啟動服務(wù)時沒有指定配置文件,新的配置會在~/.odoorc中生成痹届。查看下一部分獲取更多有關(guān)配置文件的信息呻待。

創(chuàng)建新數(shù)據(jù)庫

這個對話框用于創(chuàng)建一個由當(dāng)前Odoo服務(wù)處理的新數(shù)據(jù)庫實(shí)例:

  1. 在數(shù)據(jù)庫管理窗口,點(diǎn)擊頁面底部的Create Database按鈕:


  2. 填寫表單短纵,如下:

    • Master Password:這是這一實(shí)例的master密碼带污。
    • Database Name:輸入你所想要創(chuàng)建的數(shù)據(jù)庫名稱。
    • Password:輸入你想為新實(shí)例所設(shè)置的admin用戶密碼香到。
    • Phone Number:設(shè)置電話號碼(可選)鱼冀。
    • Language:在下拉列表中選擇你希望新數(shù)據(jù)庫默認(rèn)安裝的語言。
    • Country:在下拉列表中選擇主公司的國家悠就。選擇這一項(xiàng)后會自動做一些配置千绪,如公司的幣種。
    • Load demonstration data:勾選獲取演示數(shù)據(jù)梗脾。這對于運(yùn)行交互式測試或?yàn)橛脩粼O(shè)置演示項(xiàng)目非常有用荸型,但針對包含生產(chǎn)數(shù)據(jù)的數(shù)據(jù)庫設(shè)計時則不應(yīng)勾選。

    ??如果你想使用該數(shù)據(jù)庫來運(yùn)行模塊的自動化測試(參見第八章 調(diào)試)炸茧,你會需要有演示數(shù)據(jù)瑞妇,因?yàn)镺doo中的大多數(shù)自動化測試依賴于這些記錄來成功運(yùn)行。

  3. 點(diǎn)擊Continue按鈕并等待新數(shù)據(jù)庫初始化完成梭冠。然后你會被重定向到該實(shí)例并以管理員進(jìn)行連接辕狰。

小貼士:問題解決:如果你被重定向到登錄頁,這可能是因?yàn)橄騉doo傳遞了--db-filter選項(xiàng)并且與新數(shù)據(jù)庫名不匹配造成的控漠。注意odoo-bin start會默默地進(jìn)行這一操作蔓倍,僅讓當(dāng)前數(shù)據(jù)庫可用悬钳。解決這一問題,只需不使用start命令來對Odoo進(jìn)行重啟偶翅,在本章中的從源碼輕松安裝 Odoo 一節(jié)展示過這一做法默勾。如果你有一個配置文件(參見本章后面的在一個文件中存儲實(shí)例配置一節(jié)),那么請檢查db_filter并未進(jìn)行設(shè)置或設(shè)置一個與新數(shù)據(jù)庫匹配的值聚谁。

復(fù)制數(shù)據(jù)庫

通常你已經(jīng)有一個數(shù)據(jù)庫了母剥,你會想要使用它做一存儲過程的試驗(yàn)或運(yùn)行一個測試,但又不修改已有數(shù)據(jù)垦巴。這里的方案很簡單:復(fù)制該數(shù)據(jù)庫并在拷貝上運(yùn)行測試媳搪。可以按需重復(fù)多次:

  1. 在數(shù)據(jù)庫管理頁面骤宣,在想要復(fù)制的數(shù)據(jù)庫旁點(diǎn)擊Duplicate Database 鏈接:


  2. 填寫表單如下:
    • Master Password:這是Odoo服務(wù)的master密碼
    • New Name:給予拷貝的名稱
  3. 點(diǎn)擊Continue按鈕秦爆。
  4. 你可以在數(shù)據(jù)庫管理頁面點(diǎn)擊新創(chuàng)建的數(shù)據(jù)庫名稱來訪問該數(shù)據(jù)庫的登錄頁面。

刪除數(shù)據(jù)庫

在完成測試之后憔披,你會想要清理掉所復(fù)制的數(shù)據(jù)庫等限。通過如下步驟來進(jìn)行清理:

  1. 在數(shù)據(jù)庫管理頁面,點(diǎn)擊想刪除的數(shù)據(jù)庫名稱旁的Delete Database鏈接:


  2. 填寫表單并輸入 Master Password芬膝,即Odoo服務(wù)的master密碼望门。
  3. 點(diǎn)擊Delete按鈕。

??小心锰霜!數(shù)據(jù)丟失筹误!

如果你選擇了錯誤的數(shù)據(jù)庫,并且沒有備份癣缅,則無法恢復(fù)損失的數(shù)據(jù)厨剪。

備份數(shù)據(jù)庫

需執(zhí)行如下步驟來創(chuàng)建一個備份:

  1. 在數(shù)據(jù)庫管理頁面,點(diǎn)擊想要備份的數(shù)據(jù)庫旁的Backup Database鏈接:


  2. 填寫表單

    • Master Password:Odoo服務(wù)的master密碼友存。
    • Backup Format:對生產(chǎn)數(shù)據(jù)庫請保持使用zip祷膳,因?yàn)檫@是唯一真正的全量備份格式。僅在備份不關(guān)心文件存儲的開發(fā)數(shù)據(jù)庫時使用pg_dump格式屡立。
  3. 點(diǎn)擊Backup直晨。然后瀏覽器會下載備份文件。

恢復(fù)數(shù)據(jù)庫備份

如果你需要恢復(fù)一個備份膨俐,需要按如下步驟操作:

  1. 在數(shù)據(jù)庫管理頁面勇皇,點(diǎn)擊頁面詢問的Restore Database按鈕:


  2. 填寫表單:

    • Master Password:這是Odoo服務(wù)的master密碼。
    • File:這是之前所下載的Odoo備份
    • Database Name:提供你需進(jìn)行備份恢復(fù)的數(shù)據(jù)庫名稱焚刺。該數(shù)據(jù)庫在服務(wù)器上一定不能存在敛摘。
    • This database might have been moved 或copied:如果原數(shù)據(jù)庫在另一臺服務(wù)器上或是為從當(dāng)前服務(wù)器刪除則選擇數(shù)據(jù)庫被移動。否則選擇數(shù)據(jù)庫是一個拷貝檩坚,這也是安全的默認(rèn)選項(xiàng)着撩。
  3. 點(diǎn)擊Continue按鈕。

??不能在數(shù)據(jù)庫自身之上恢復(fù)數(shù)據(jù)庫匾委。這么做會得到一條錯誤消息(Database restore error: Database already exists)拖叙。你需要先刪除該數(shù)據(jù)庫。

運(yùn)行原理...

除Change master password以外的這些頁面上的功能赂乐,在服務(wù)器上運(yùn)行PostgreSQL運(yùn)維命令并通過網(wǎng)頁界面回報結(jié)果薯鳍。

master密碼是非常重要的信息,存儲在Odoo服務(wù)的配置文件中挨措,從不在數(shù)據(jù)庫中進(jìn)行存儲挖滤。曾經(jīng)有一個admin默認(rèn)值,但使用這個值是一個廣為人知的安全問題浅役。在Odoo v9之后的版本中斩松,這被識別為一個未設(shè)置的master密碼,并在訪問數(shù)據(jù)庫管理頁面時會敦促你修改密碼觉既。雖然這在配置文件中以admin_passwd進(jìn)行存儲惧盹,它與admin的密碼是不同的,它們是兩個獨(dú)立的密碼瞪讼。master密碼是為Odoo服務(wù)進(jìn)程設(shè)置的钧椰,進(jìn)程本身可以處理多個數(shù)據(jù)庫實(shí)例,每個實(shí)例都一個獨(dú)立的admin用戶及其自己的密碼符欠。

??安全考慮:記住本章中我們所考慮的是開發(fā)環(huán)境嫡霞。Odoo數(shù)據(jù)庫管理界面在我們運(yùn)行生產(chǎn)服務(wù)時是需要進(jìn)行安全保護(hù)的,因此不會給到太多的敏感信息的訪問權(quán)限希柿,尤其是如果服務(wù)器托管了多個不同客戶端的Odoo實(shí)例時诊沪。這會在第三章 服務(wù)器部署中進(jìn)行講解。

Odoo使用PostgreSQL的createdb工具來新建數(shù)據(jù)庫狡汉,它通過和以空數(shù)據(jù)庫啟動Odoo時相同的方式調(diào)用內(nèi)部的Odoo函數(shù)來初始化新數(shù)據(jù)庫娄徊。

Odoo使用createdb的--template選項(xiàng)傳遞原數(shù)據(jù)庫作為參數(shù)來復(fù)制數(shù)據(jù)庫。這基本上使用內(nèi)部優(yōu)化的PostgreSQL例行程序在新數(shù)據(jù)庫中復(fù)制模板數(shù)據(jù)庫的結(jié)構(gòu)盾戴,這比創(chuàng)建備份和恢復(fù)備份的速度會快很多(尤其是在使用網(wǎng)頁界面時寄锐,還要求你下載備份文件然后再重新上傳)。

備份和恢復(fù)備份操作分別使用pg_dump和pg_restore工具尖啡。在使用zip格式時橄仆,備份還包含文件存儲的拷貝,其中為配置Odoo所不保存在數(shù)據(jù)庫中的文件的拷貝衅斩,這是12.0中的默認(rèn)選項(xiàng)盆顾。如果沒做過修改的話,這些文件存放在~/.local/share/Odoo/filestore中畏梆。

??如果備份很大您宪,下載時會失敗奈懒。這可能是因?yàn)镺doo服務(wù)無法在內(nèi)存中處理這么大的文件或者是因?yàn)榉?wù)在反向代理之后運(yùn)行(參見第三章 服務(wù)器部署)而這個代理設(shè)置了HTTP請求大小的限制。反過來宪巨,出于某些原因磷杏,你可能會在恢復(fù)數(shù)據(jù)庫的操作中遇到問題。當(dāng)你開始碰到這些問題時捏卓,是投入時間建立更健壯的外部備份方案的時候了极祸。

更多內(nèi)容...

有經(jīng)驗(yàn)的Odoo開發(fā)人員通常不使用數(shù)據(jù)庫管理界面,而在命令行執(zhí)行相關(guān)操作怠晴。比如使用演示數(shù)據(jù)初始化新數(shù)據(jù)庫遥金,可以使用如下的一行代碼:

$ createdb testdb && odoo-bin -d testdb

命令行的另一個彩蛋是你可以在使用時要求安裝一些插件,比如 -i sale,purchase,stock(更多內(nèi)容請見第二章 管理Odoo服務(wù)器實(shí)例)蒜田。

停止服務(wù)并運(yùn)行如下這些命令來復(fù)制數(shù)據(jù)庫:

$ createdb -T dbname newdbname
$ cd ~/.local/share/Odoo/filestore # 如果你修改了data_dir請調(diào)整此處
$ cp -r dbname newdbname
$ cd -

注意在開發(fā)的上下文中稿械,文件存儲通常會被省略。

??createdb -T 僅在數(shù)據(jù)庫沒有活躍會話方能使用冲粤,這表示在通過命令行復(fù)制數(shù)據(jù)庫之前你需要關(guān)閉Odoo服務(wù)溜哮。

可運(yùn)行如下命令來刪除一個實(shí)例:

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

可運(yùn)行如下命令來創(chuàng)建一個備份(假設(shè)PostgreSQL服務(wù)在本地運(yùn)行):

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

可運(yùn)行如下命令來恢復(fù)備份:

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

??當(dāng)心!

如果你的Odoo實(shí)例使用了另一個用戶來連接數(shù)據(jù)庫色解,需要傳遞-U username來使用正確的用戶作為恢復(fù)數(shù)據(jù)庫的所有者茂嗓。

在一個文件中存儲實(shí)例配置

odoo-bin有幾十個選項(xiàng),記住所有這些以及記得在啟動服務(wù)時適當(dāng)?shù)倪M(jìn)行配置會非常單調(diào)費(fèi)力科阎。所幸可以將所有這些存儲在一個配置文件中述吸,只需對想要修改的選項(xiàng)進(jìn)行手動修改,比如為開發(fā)環(huán)境锣笨。

如何配置

運(yùn)行如下命令來為你的Odoo實(shí)例生成一個配置文件:

$ ./odoo-bin --save --config myodoo.cfg --stop-after-init

你可以添加其它選項(xiàng)蝌矛,它們的值就會被保存到所生成的文件中了。所有未設(shè)置的值都會以默認(rèn)值進(jìn)行保存错英。使用如下命令來獲取選項(xiàng)列表:

$ ./odoo-bin --help | less

這會提供一些不同選項(xiàng)所執(zhí)行內(nèi)容的幫助文檔入撒。要從命令行形式轉(zhuǎn)化為配置形式,使用長選項(xiàng)名椭岩,刪除前面的中間杠茅逮,并將中間的中間杠轉(zhuǎn)換為下劃線:

--without-demo就變成了without_demo。對大多數(shù)選擇都是如此判哥,但有一些例外献雅,在下一部分中會列出。

編輯myodoo.cfg文件(使用下一部分中的表示來查看所要修改的參數(shù))塌计。然后運(yùn)行如下命令來以所保存的選項(xiàng)啟動服務(wù):

$ ./odoo-bin -c myodoo.cfg

??-config選項(xiàng)通常簡寫為-c挺身。

運(yùn)行原理

啟動時,Odoo通過三個步驟來加載它的配置锌仅。首先章钾,所有選項(xiàng)的一組默認(rèn)值會從源碼中進(jìn)行初始化墙贱,然后解析配置文件,該文件中所定義的任意值會覆蓋默認(rèn)值贱傀。最后嫩痰,會分析命令行選項(xiàng),它們的值會覆蓋前面步驟中所獲取的配置窍箍。

前面我們已提到,配置變量的名稱可通過刪除命令行選項(xiàng)的前置中間杠以及將中間的連接符轉(zhuǎn)換為下劃線來獲取丽旅。其中有一些例外椰棘,特別是下面這些:

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

以下是通過配置文件設(shè)置的常用選項(xiàng)列表:

選項(xiàng) 格式 用途
without_demo 逗號分隔的模塊名列表,或 all(取消所有模塊的演示數(shù)據(jù))榄笙,或 False(為所有模塊啟用演示數(shù)據(jù)) 該選項(xiàng)阻止模塊演示數(shù)據(jù)被加載
addons_path 逗號分隔的路徑列表 這是一個服務(wù)查找插件的路徑名列表(參見第二章 管理Odoo服務(wù)器實(shí)例
admin_passwd 文本 這是 master 密碼(參見前面部分的內(nèi)容)
data_dir 一個目錄路徑 這個目錄中服務(wù)會存儲session信息邪狞、從網(wǎng)上下載的插件以及在啟用了文件存儲時存放文檔。
db_host 主機(jī)名 這是運(yùn)行PostgreSQL服務(wù)的服務(wù)器名茅撞。使用 False 來使用本地 Unix 域套接字帆卓,以及 localhost 來使用本地 TCP 套接字。
db_user 數(shù)據(jù)庫登錄用戶 在db_host為 False 時這通常為空米丘。這將是用于連接數(shù)據(jù)庫的用戶剑令。
db_password 數(shù)據(jù)庫用戶密碼 在db_host為 False以及 db_user 與運(yùn)行服務(wù)的用戶相同時通常為空运敢。閱讀pg_hba.conf的主頁面來獲取更多相關(guān)信息幽污。
db_name 數(shù)據(jù)庫名 用于設(shè)置一些默認(rèn)執(zhí)行命令作用的數(shù)據(jù)庫名。這不會限制服務(wù)所操作的數(shù)據(jù)庫哟楷。參照下面的 dbfilter 參數(shù)堕扶。
dbfilter 一個正則表達(dá)式 該表達(dá)式應(yīng)匹配服務(wù)所使用的數(shù)據(jù)庫名碍脏。如果你運(yùn)行網(wǎng)站,應(yīng)該匹配單個數(shù)據(jù)庫稍算,類似^databasename$典尾。更多相關(guān)信息請參見第三章 服務(wù)器部署
http_interface 網(wǎng)絡(luò)接口的 IP 地址 默認(rèn)為0.0.0.0糊探,表示服務(wù)監(jiān)聽所有接口钾埂。
http_port
longpolling_port 端口號 這些是 Odoo 服務(wù)所會監(jiān)聽的端口。你需要指定這兩者來在同一臺主機(jī)上運(yùn)行多個 Odoo 服務(wù)科平;longpolling_port僅在workers不為0時使用勃教。
http_port默認(rèn)值為8069,longpolling_port默認(rèn)為8072匠抗。
logfile 文件路徑 Odoo 寫入日志的文件故源。
log_level 日志信息級別 指定日志的級別」常可接受的值(內(nèi)容逐漸增加)包括critical, error, warn, info, debug, debug_rpc, debug_rpc_answer, debug_sql绳军。
workers 整數(shù) worker進(jìn)程的數(shù)量印机,更多信息參見第三章 服務(wù)器部署
list_db True/False 設(shè)置為 True 來取消列出數(shù)據(jù)庫门驾。更多信息請參見第三章 服務(wù)器部署射赛。
proxy_mode True/False 激活反向代理WSGI封裝。僅在運(yùn)行于可信任的 web 代理后啟用它奶是。

譯者注:表中的pg_hba.conf文件位置:/etc/postgresql/xxx/main/pg_hba.conf

??Odoo對配置文件的解析現(xiàn)在使用Python的ConfigParser模塊楣责。但是在Odoo 11.0中的實(shí)現(xiàn)發(fā)生了變化,它不再支持使用變量插值聂沙。因此秆麸,如果你習(xí)慣了使用%(section.variable)s表達(dá)式從其它變量的值定義變量值的話,你會需要改變這一習(xí)慣并恢復(fù)使用顯示的值及汉。

有些選項(xiàng)不在配置文件 使用沮趣,但廣泛用于開發(fā)之中:

選項(xiàng) 格式 用途
-i或--init 逗號分隔的模塊名列表 它會在初始化數(shù)據(jù)庫時默認(rèn)安裝給定的模塊
-u 或-update 逗號分隔的模塊名列表 它會在重啟服務(wù)時更新給定的模塊。多在修改了源代碼或從 git 更新了分支時使用
--dev all, reload, qweb,
werkzeug, xml 這會啟用開發(fā)者模式并自動加載功能坷随。

激活Odoo開發(fā)者工具

開發(fā)人員在使用Odoo時房铭,應(yīng)當(dāng)知道如何在網(wǎng)頁界面激活開發(fā)者模式,這樣你就可以訪問技術(shù)設(shè)置菜單及開發(fā)者信息温眉。啟動調(diào)試模式會暴露出一些高級配置項(xiàng)及字段缸匪。在Odoo中隱藏這些選項(xiàng)和字段來獲取更佳的易用性,因?yàn)槿粘2粫褂玫剿鼈儭?/p>

如何激活

按照如下步驟來在網(wǎng)頁界面中激活開發(fā)者模式:

  1. 連接到你的實(shí)例并以 admin 登錄
  2. 訪問Settings菜單
  3. 找到Share the love版塊类溢,應(yīng)該是在頁面的右手邊

    譯者注:原書中使用企業(yè)版進(jìn)行截圖豪嗽,Alan 將盡量全部使用社區(qū)版本進(jìn)行操作
  4. 點(diǎn)擊Activate the developer mode鏈接
  5. 等待用戶界面重載

??其它方式:也可以通過編輯 URL 來激活開發(fā)者模式。在鏈接的#號前豌骏,插入?debug龟梦。例如,如果你的鏈接是http://localhost:8069/web#menu_id=102&action=94窃躲,那么你需要將其修改為http://localhost:8069/web?debug#menu_id=102&action=94计贰。此外,如果你想要使用帶靜態(tài)文件的調(diào)試模式蒂窒,則將 URL修改為http://localhost:8069/web?debug=assets#menu_id=102&action=94

譯者注:加(with assets)的模式會將靜態(tài)文件(css, js)分拆每一個具體文件躁倒,這將有助于調(diào)試,但相對于合并的靜態(tài)文件而言會損失一些加載速度

通過如下其中一種方式可退出開發(fā)者模式:

  • 編輯URL并刪除該字符串
  • 在開發(fā)者模式激活時使用Share the love版塊中的Deactivate the developer mode鏈接

很多開發(fā)者使用瀏覽器插件來切換調(diào)試者模式洒琢。通過使用插件秧秉,你可以無需訪問settings菜單快速地切換調(diào)試模板。這些插件可在Firefox和Chrome瀏覽器中使用衰抑。參見如下截圖象迎,它有助于你在Chrome商店中找到該插件:

運(yùn)行原理

開發(fā)者模式中,會發(fā)生兩件事情:

  • 鼠標(biāo)在表單視圖的字段上或列表視圖的列名上懸浮時會給出提示信息,提供有關(guān)字段的技術(shù)信息(內(nèi)部名稱砾淌、類型等)啦撮。
  • 調(diào)試圖標(biāo)下拉菜單會顯示在右上角用戶菜單旁,給到顯示的模型相關(guān)技術(shù)信息的訪問汪厨,有各種關(guān)聯(lián)的視圖定義赃春、工作流、自定義過濾管理等等劫乱。

開發(fā)模式有一個變體:Developer mode (with assets)织中。這一模式和普通的開發(fā)者模式相似,但除此之外衷戈,發(fā)送到瀏覽器的avaScript 和 CSS沒有做最小化處理狭吼,這表示你瀏覽器的網(wǎng)頁調(diào)試工具可以方便地用于調(diào)試JavaScript代碼(更多內(nèi)容請見第十五章 CMS網(wǎng)站開發(fā))。

??注意脱惰!

使用非開發(fā)者模式及開發(fā)者模式來測試你的插件,因JavaScript庫的非最小化版本會隱藏最小化版本中傷你至深的 bug窿春。

從源碼更新Odoo

在第一部分中拉一,我們看到了如何使用git倉庫從源碼安裝Odoo。這一設(shè)置的主要好處是可以使用git更新源碼獲取最新的 bug 修復(fù)旧乞。

準(zhǔn)備工作

停止任意當(dāng)前需更新源代碼的運(yùn)行中Odoo實(shí)例蔚润,然后對所有你關(guān)心的數(shù)據(jù)庫做備份,以免更新出現(xiàn)問題尺栖。顯然這是你對生產(chǎn)數(shù)據(jù)庫所需做的事情嫡纠。參見本章中的管理Odoo服務(wù)端數(shù)據(jù)庫一節(jié)獲取更新操作指南。

接下來延赌,記錄下你所運(yùn)行源碼的當(dāng)前版本號除盏。這么做最好的方式是使用如下命令創(chuàng)建一個輕量的標(biāo)簽:

$ cd ~/odoo-dev/odoo
$ git checkout 12.0
$ git tag 12.0-before-update-$(date --iso)

如何更新

使用如下代碼來更新Odoo源碼:

$ git pull –-ff-only origin 12.0

這會獲取提交到當(dāng)前分支的最新版源代碼。

運(yùn)行如下代碼更新運(yùn)行這一代碼的實(shí)例:

$ ./odoo-bin -c myodoo.cfg --stop-after-init -u base

??-u是odoo-bin的--update選項(xiàng)的簡寫方式挫以。

如果你沒有在配置文件中設(shè)置數(shù)據(jù)庫者蠕,則需添加-d database_name選項(xiàng)。該命令在運(yùn)行這一版本源代碼的所有實(shí)例上都要執(zhí)行掐松。

如果更新失敗了踱侣,不必慌張,因?yàn)槟阌袀浞荩?/p>

  1. 仔細(xì)閱讀報錯信息并將其保存到一個文件中大磺,因?yàn)檫@稍后做漏洞報告時會有用抡句。
  2. 如果你不能確定問題,將服務(wù)和Odoo源代碼恢復(fù)到上一個版本杠愧,我們已知這個本版本可用并在更新源碼版本前使用了標(biāo)簽進(jìn)行設(shè)置待榔。
$ git reset --hard 12.0-before-update-$(date --iso)
  1. 刪除出問題的數(shù)據(jù)庫并從所做的備份進(jìn)行恢復(fù)(參見本章的管理Odoo服務(wù)端數(shù)據(jù)庫一節(jié)獲取操作指南)。
  2. 重啟實(shí)例并告知用戶更新延遲了流济。

??注意在現(xiàn)實(shí)生活中究抓,這絕不應(yīng)該發(fā)生在生產(chǎn)數(shù)據(jù)庫上猾担,因?yàn)槟銘?yīng)該使用一個復(fù)制數(shù)據(jù)庫來對升級先進(jìn)行測試、修復(fù)問題刺下,并僅在確保其運(yùn)行沒有問題時在生產(chǎn)服務(wù)器上進(jìn)行升級绑嘹。但是有時還是會中招,所以即便你很確定橘茉,還是要做備份工腋。

運(yùn)行原理

更新源碼要確保使用git checkout來確定我們處于正確的分支上,然后使用git pull獲取最新的代碼畅卓。如果本地做了提交卻沒有在遠(yuǎn)程倉庫中時--ff-only會產(chǎn)生錯誤擅腰。如果發(fā)生了這一錯誤且你想要保留自己的修改,你可以使用git pull(不加--ff-only)來將遠(yuǎn)程的修改與你自己的進(jìn)行合并翁潘。如果不保留趁冈,使用 git reset --hard origin/12.0來強(qiáng)制更新,這會丟失掉本地的修改拜马。

更新命令使用如下選項(xiàng):

  • -c:指定配置文件
  • --stop-after-init:在更新結(jié)束時停止實(shí)例
  • -u base或--update base:請求base模塊的更新

在更新模塊時渗勘,Odoo進(jìn)行如下操作:

  • 它更新結(jié)構(gòu)變化了的模塊中所定義的模型數(shù)據(jù)庫結(jié)構(gòu)。對于Odoo穩(wěn)定分支的更新俩莽,應(yīng)該不會有這些變化 旺坠,對你自己的插件或第三方插件上可能會發(fā)生。
  • 它更新存儲在模塊數(shù)據(jù)文件中的數(shù)據(jù)庫記錄扮超,尤其是視圖取刃。然后遞歸更新聲明依賴這一模塊的已安裝模塊。

因?yàn)閎ase模塊是所有Odoo模塊的隱式依賴出刷,更新它會觸發(fā)你的實(shí)例中所有已安裝模塊的更新璧疗。要更新所有已安裝模塊,可使用別名 all 來替代 base馁龟。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末病毡,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子屁柏,更是在濱河造成了極大的恐慌啦膜,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件淌喻,死亡現(xiàn)場離奇詭異僧家,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)裸删,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進(jìn)店門八拱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事肌稻∏迨矗” “怎么了?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵爹谭,是天一觀的道長枷邪。 經(jīng)常有香客問我,道長诺凡,這世上最難降的妖魔是什么东揣? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮腹泌,結(jié)果婚禮上嘶卧,老公的妹妹穿的比我還像新娘。我一直安慰自己凉袱,他們只是感情好专甩,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布羞秤。 她就那樣靜靜地躺著哺哼,像睡著了一般茵汰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼肢藐。 笑死凑阶,一個胖子當(dāng)著我的面吹牛调窍,可吹牛的內(nèi)容都是我干的陨晶。 我是一名探鬼主播猬仁,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼帝璧,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了湿刽?” 一聲冷哼從身側(cè)響起的烁,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎诈闺,沒想到半個月后渴庆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡雅镊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年襟雷,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片仁烹。...
    茶點(diǎn)故事閱讀 39,739評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡耸弄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出卓缰,到底是詐尸還是另有隱情计呈,我是刑警寧澤,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布征唬,位于F島的核電站捌显,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏总寒。R本人自食惡果不足惜扶歪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望摄闸。 院中可真熱鬧善镰,春花似錦、人聲如沸贪薪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽画切。三九已至,卻和暖如春囱怕,著一層夾襖步出監(jiān)牢的瞬間霍弹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工娃弓, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留典格,地道東北人。 一個月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓台丛,卻偏偏與公主長得像耍缴,于是被迫代替她去往敵國和親砾肺。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評論 2 354