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

全書完整目錄請見:Odoo 12開發(fā)者指南(Cookbook)第三版
https://alanhou.org/odoo12-cookbook/
本章中,我們將講解如下主題:
Odoo生態(tài)系統(tǒng)
從源碼輕松安裝Odoo
使用start命令管理Odoo環(huán)境
管理Odoo服務(wù)端數(shù)據(jù)庫
在一個(gè)文件中存儲實(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ù)器部署中講解。
如果你是一個(gè)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有兩個(gè)版本。第一個(gè)是社區(qū)版,完全開源,第二是企業(yè)版,需要授權(quán)證書費(fèi)用。不同于其它軟件供應(yīng)商,Odoo企業(yè)版僅僅是在社區(qū)版基礎(chǔ)上添加了一些附加特性/應(yīng)用的高級應(yīng)用?;旧希髽I(yè)版運(yùn)行于社區(qū)版之上。社區(qū)版采用Lesser General Public License v3.0 (LGPLv3)許可證書,并帶有企業(yè)版企業(yè)資源計(jì)劃(ERP)的所有基礎(chǔ)應(yīng)用,如銷售、客戶關(guān)系管理(CRM)、發(fā)票、采購、網(wǎng)站構(gòu)建器等等。而企業(yè)版采用 Odoo 企業(yè)版許可證書,這是一個(gè)自有證書。Odoo 企業(yè)版帶有高級功能如完整的財(cái)務(wù)、studio、基于IP的語音傳輸(VoIP)、移動端響應(yīng)式設(shè)計(jì)、電子簽名、營銷自動化和快遞與銀行的集成。企業(yè)版還為你提供無限的漏洞修復(fù)。下圖顯示企業(yè)版依賴于社區(qū)版,這也是為什么你需要社區(qū)版來使用企業(yè)版:

你可以通過https://www.odoo.com/page/editions查看這兩個(gè)版本的完整對比。
??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有許多個(gè)倉庫,參見下表來獲取更多信息:
[table id=2 /]
每年,Odoo會發(fā)布一個(gè)大版本(長期支持(LTS)版本)和幾個(gè)小版本。小版本多用于Odoo的在線SaaS服務(wù),表示Odoo的SaaS用戶可以更早地使用這些功能。GitHub 上大版本分支的名稱像12.0, 11.0和10.0,而小版本分支名稱有saas-12.1, saas-11.1和saas-11.2。master分支處于開發(fā)中,并隨時(shí)可能發(fā)生改變。因此,不建議在生產(chǎn)環(huán)境中使用它,因?yàn)樗赡軐?dǎo)致數(shù)據(jù)庫的崩潰。
Runbot
Runbot是Odoo的自動化測試環(huán)境。這會從Odoo的Git倉庫拉取最新分支并創(chuàng)建最近4個(gè)提交的構(gòu)建。這里,你可以測試所有的穩(wěn)定版和開發(fā)中分支。你甚至可以使用企業(yè)版并測試它的開發(fā)分支。
每個(gè)構(gòu)建有不同的背景色,表明測試用例的狀態(tài)。綠色背景表示所有的測試用例成功運(yùn)行,你可以測試該分支,而紅色背景表示在這個(gè)分支上有些測試用例出錯(cuò)了,有些功能在該構(gòu)建上可能崩潰了。你可以查看所有測試用例的日志,會顯示在安裝過程中所發(fā)生的具體事項(xiàng)。每個(gè)構(gòu)建有兩個(gè)數(shù)據(jù)庫。數(shù)據(jù)庫all安裝了所有的模型,而數(shù)據(jù)庫base僅安裝了基本的Odoo模塊。每個(gè)構(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)境,因此有時(shí)可能會有其它用戶使用/測試你所測試的相同分支。
Odoo應(yīng)用商店
Odoo幾年前發(fā)布了應(yīng)用商店,當(dāng)時(shí)就獲得了成功。現(xiàn)在,那里托管著15,000多個(gè)不同的應(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è)置價(jià)格和幣種。
你可以通過如下鏈接訪問Odoo應(yīng)用商店:https://www.odoo.com/apps。
Odoo社區(qū)聯(lián)盟(OCA)
Odoo社區(qū)聯(lián)盟(OCA)是一個(gè)開發(fā)/管理Odoo社區(qū)模塊的非營利組織。所有的OCA模塊都開源并由Odoo社區(qū)成員維護(hù)。在OCA的GitHub中,你會發(fā)現(xiàn)針對不同Odoo應(yīng)用的多個(gè)倉庫。除Odoo模塊外,它還包含很多工具、一個(gè)遷移庫、會計(jì)本地化等等。
以下是OCA官方GitHub賬戶的URL:https://github.com/OCA。
官方Odoo幫助論壇
Odoo 有一個(gè)非常強(qiáng)大的框架,大量的事只需通過使用/激活選項(xiàng)或遵循指定的模式即可實(shí)現(xiàn)。因此,如果你碰到了一些技術(shù)問題或如果你對一些復(fù)雜用例不確定,那么你就可以在Odoo官方幫助論壇上提交問詢。這個(gè)論壇上有大量活躍的開發(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)有個(gè)庫有一個(gè)預(yù)料外的版本,會有一些不同和不兼容的問題。如果你的工作站使用不同的操作系統(tǒng),一個(gè)好的方法是在工作站上設(shè)置虛擬機(jī)(VM)并在 VM 上安裝 GNU/Linux發(fā)行版。
小貼士:避免在運(yùn)行開發(fā)環(huán)境的工作站和運(yùn)行 Odoo 的虛擬機(jī)之間拷貝文件,你可以在VM中配置一個(gè)SAMBA共享并將源碼存儲在那里。然后在你的工作站上掛載該共享目錄來輕松的編輯文件。
本書假定你運(yùn)行 Debian GNU/Linux的穩(wěn)定版(在寫本書時(shí)為版本9,代號Stretch)。Ubuntu是另一個(gè)常用的選擇,因?yàn)樗菢?gòu)建在Debian之上的,本書中大部分的示例應(yīng)該都不需要進(jìn)行修改即可在其上運(yùn)行。不論你選擇哪個(gè)Linux發(fā)行版,你都應(yīng)該要有一個(gè)從命令行使用它的概念,有系統(tǒng)運(yùn)維相關(guān)知識顯然也沒有什么壞處。
準(zhǔn)備工作
我們假定你已運(yùn)行了Linux并因擁有 root 密碼或配置了 sudo 而擁有root訪問權(quán)限。下面的部分中,我們將在命令行中需要你的工作用戶的登錄名時(shí)使用$(whoami)。這是代替你輸入命令的登錄用戶的shell命令。
譯者注:Debian 的安裝請參見Odoo 12開發(fā)者指南補(bǔ)充知識
如果你有GitHub賬戶的話有些操作一定會更容易。如果你尚未擁有GitHub賬戶,請?jiān)L問https://github.com并創(chuàng)建賬戶。
如何安裝...
使用源碼安裝 Odoo,需要按照如下的步驟:
譯者注:如需使用Python 3.6請參照Odoo 12開發(fā)者指南補(bǔ)充知識,另 Alan 也按照下面的命令制作了一個(gè)安裝腳本@GitHub
運(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來獲取正確的樣式。
下載并安裝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現(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配置PostgreSQL
$ sudo -u postgres createuser --createdb $(whoami) $ createdb $(whoami)配置git(以下信息請自行修改):
$ git config --global user.name "Your Name" $ git config --global user.email youremail@example.com克隆 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)境耗時(shí)會非常久
創(chuàng)建一個(gè)odoo-12.0 虛擬環(huán)境并激活它:
$ virtualenv -p python3 ~/odoo-12.0 $ source ~/odoo-12.0/bin/activate在virtualenv中安裝Odoo的Python依賴:
$ pip3 install -r requirements.txt創(chuàng)建并啟動你的第一個(gè)Odoo實(shí)例:
$ createdb odoo-test $ python3 odoo-bin -d odoo-test --addons-path=addons \ --db-filter=odoo-test$譯者注:初次啟動可能會需要添加-i base參數(shù)來初始化數(shù)據(jù)庫
在瀏覽器中訪問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的管理用戶)編輯一些文件,我們需要安裝一個(gè)基本控制臺的文本編輯器。我們推薦使用nano,因?yàn)樗褂蒙戏浅:唵?,但請自由選擇你自己所喜歡的編輯器,只要能在Console中使用即可。例如,你可以使用vim, e3或emacs-nox。
Wkhtmltopdf是Odoo的一個(gè)運(yùn)行時(shí)依賴,用于生成PDF報(bào)告。Odoo 12.0所要求的版本為0.12.4,在當(dāng)前的GNU/Linux發(fā)行版中并沒有包含。所幸wkhtmltopdf的維護(hù)者提供對不同發(fā)行版的預(yù)構(gòu)建包,地址為http://wkhtmltopdf.org/downloads.html.
有很多其它的運(yùn)行時(shí)依賴為Python模塊,我們可以在虛擬環(huán)境中使用pip3進(jìn)行安裝。但是,其中一些Python模塊會包含對原生C語言庫的依賴,Python綁定需要它來進(jìn)行編譯。因此,我們安裝了這些C語言庫的開發(fā)包以及Python開發(fā)包和C編譯器。在安裝了這些構(gòu)建依賴之后,我們就可以使用pip3 install -r requirements.txt(Odoo源代碼中的一個(gè)文件)來下載、編譯和安裝這些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)建一個(gè)newenv目錄,其中包含一個(gè)bin/子目錄和一個(gè)lib/python3.5(譯者注:或你安裝的其它 Python 3版本)子目錄。請記得加上-p python3,不加的話你有可能會創(chuàng)建一個(gè)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命令也可使用 . (單個(gè)點(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腳本。這是一個(gè)偏好問題,你應(yīng)該通過嘗試來看哪種方式更適合你。
你可以在第一行放上可執(zhí)行Python腳本。應(yīng)該會是這樣:
#! /usr/bin/env python3
通過一個(gè)激活的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)建了一個(gè)與系統(tǒng)當(dāng)前用戶相同的用戶名,并給其使用同名新用戶新建數(shù)據(jù)庫的權(quán)限。在我們使用psql命令時(shí)這會被用作默認(rèn)數(shù)據(jù)庫。
在開發(fā)服務(wù)器上,給予PostgreSQL用戶更多的權(quán)限并使用 --superuser命令行參數(shù)而不僅僅是--createdb沒有問題。效果是該用戶可以創(chuàng)建其它用戶并可全局管理數(shù)據(jù)庫實(shí)例。如果你覺得--superuser太過了,在創(chuàng)建你的數(shù)據(jù)庫用戶時(shí)仍可以在--createdb之外用--createrole。在生產(chǎn)服務(wù)器上要避免這么做,因?yàn)檫@會給予黑客在一些部署代碼中更多地利用漏洞的機(jī)會(參見第三章 服務(wù)器部署)。
如果你想使用不同的數(shù)據(jù)庫用戶,則需提供該用戶的密碼。這通過在創(chuàng)建用戶時(shí)在命令行傳遞--pwprompt標(biāo)記來實(shí)現(xiàn),此時(shí)命令行會提示你輸入密碼。
如果用戶已存在而你又想要為其設(shè)置密碼(或修改一個(gè)已忘記的密碼),可以使用如下命令:
$ psql -c "alter role $(whoami) with password 'newpassword'"
小貼士:如果這個(gè)命令執(zhí)行報(bào)錯(cuò)提示數(shù)據(jù)庫不存在,這是因?yàn)槟銢]按照操作步驟的第4步創(chuàng)建一個(gè)與當(dāng)前登錄名相同的數(shù)據(jù)庫。不必?fù)?dān)心,僅需使用 --dbname選項(xiàng)來添加已有數(shù)據(jù)庫名,例如 --dbname template1。
Git配置
在本書的某些部分,你會需要使用git commit進(jìn)行提交。必須要進(jìn)行一些基礎(chǔ)設(shè)置否則會報(bào)錯(cuò),你需要提供自己的Git用戶名和email地址。Git會很好的提示你這做,但你也可以現(xiàn)在就提前設(shè)置好。
??如果你使用一些諸如Travis或持續(xù)集成的服務(wù)這也是需要謹(jǐn)記于心的,你的測試腳本會需要執(zhí)行一些git合并。你需要提供一個(gè)名稱和email來讓合并成功執(zhí)行。
下載Odoo源碼
下載Odoo源代碼由git clone操作來執(zhí)行;保持耐心,這會花費(fèi)一些時(shí)間。--branch 12.0 --single-branch選項(xiàng)會避免下載其它分支,節(jié)約一些時(shí)間。也可以使用--depth選項(xiàng)來避免下載整個(gè)倉庫歷史記錄,但該選項(xiàng)的缺點(diǎn)是你在查找問題時(shí)將無法去查看歷史記錄。
Odoo開發(fā)者還建議了nightly構(gòu)建,可以通過tarball和發(fā)行包進(jìn)行獲取。使用git clone的主要優(yōu)勢在于在源代碼樹提交了新的漏洞修復(fù)時(shí)你可以更新自己的倉庫。你也將可以輕松地測試所建議的修復(fù)并追蹤回退,這會讓你的漏洞報(bào)告更精確及對開發(fā)者更有幫助。
啟動實(shí)例
到了你期待已久的時(shí)刻了。要啟動我們的第一個(gè)實(shí)例,首先我們創(chuàng)建一個(gè)新的空數(shù)據(jù)庫,然后使用odoo-bin以及如下命令行參數(shù):
-d database_name:默認(rèn)使用這一數(shù)據(jù)庫。
--db-filter=database_name$:僅嘗試連接匹配所提供正則表達(dá)式的數(shù)據(jù)庫。一個(gè)Odoo安裝可以為使用不同數(shù)據(jù)庫的多個(gè)實(shí)例提供服務(wù),通過這一參數(shù)限制可用的數(shù)據(jù)庫。最后的那個(gè)$很重要,因?yàn)樵谄ヅ淠J街惺褂昧苏齽t表達(dá)式,這會避免選擇以相同的指定字符串開頭的名稱。
--addons-path=directory1,directory2,...:Odoo通過這一逗號分隔列表中的目錄來查找插件(add-on)。在實(shí)例創(chuàng)建的時(shí)候掃描該列表來添加實(shí)例中可用的插件模塊列表。
如果你使用了與Linux當(dāng)前登錄用戶不同的數(shù)據(jù)庫用戶,則需要再傳遞如下的參數(shù):
--db_host=localhost: 使用一個(gè)數(shù)據(jù)庫服務(wù)的 TCP連接
--db_user=database_username: 使用指定的數(shù)據(jù)庫登錄用戶
--db_password=database_password: 這是用于認(rèn)證PostgreSQL服務(wù)的密碼
使用--help可獲取所有可用選項(xiàng)的一個(gè)總覽。我們在本章后面及第二章 管理Odoo服務(wù)器實(shí)例中還會來了解odoo-bin腳本更多的知識。
Odoo在一個(gè)空數(shù)據(jù)庫上啟動時(shí),它會首先創(chuàng)建一個(gè)支持其操作所需的數(shù)據(jù)庫結(jié)構(gòu)。它還會掃描插件路徑來查找可用的插件模塊,并將一些內(nèi)容插入到數(shù)據(jù)庫的初始記錄中。這包括admin用戶及默認(rèn)admin密碼,在登錄時(shí)你將需要使用。
Odoo包含一個(gè)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ū)模塊。將它們放在一個(gè)單獨(dú)的目錄中會讓為Odoo安裝升級或調(diào)試自定義模塊的問題更為簡單。我們只需將該目錄添加到插件路徑中,它們就可以同核心模塊一樣在實(shí)例中使用了。
可以將這個(gè)模塊路徑看作一個(gè)Odoo環(huán)境。Odoo的start命令讓以目錄組織Odoo實(shí)例更為方便,每個(gè)目錄中包含自己的模塊。
準(zhǔn)備工作
這一節(jié)要求已安裝過 Odoo。我們假定代碼的目錄為~/odoo-dev/odoo并且已激活虛擬環(huán)境。
這表示運(yùn)行如下命令可以成功地啟動Odoo服務(wù):
$ ~/odoo-dev/odoo/odoo-bin
如何啟動...
為你的實(shí)例創(chuàng)建一個(gè)工作環(huán)境,需要按照如下步驟:
更改到Odoo所在目錄
$ cd ~/odoo-dev選擇該環(huán)境的名稱并為其創(chuàng)建一個(gè)目錄:
$ mkdir my-odoo更改到這個(gè)目錄并為該環(huán)境啟動Odoo服務(wù)實(shí)例
$ cd my-odoo/ $ ../odoo/odoo-bin start
運(yùn)行原理...
Odoo的start命令是使用當(dāng)前目錄啟動服務(wù)實(shí)例的一個(gè)快捷方式。目錄名自動作為數(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è)置一個(gè)具體的路徑來供使用。例如,可在任何目錄下使用這條命令:
$ ~/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í)例所有的數(shù)據(jù)都存儲在PostgreSQL數(shù)據(jù)庫中。你習(xí)慣的所有標(biāo)準(zhǔn)數(shù)據(jù)庫管理工具都可以使用,但Odoo為一些通過操作提供了一個(gè)網(wǎng)頁界面。
準(zhǔn)備工作
我們假定你的工作環(huán)境已設(shè)置,并且你已運(yùn)行了一個(gè)實(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ù)庫:
進(jìn)入實(shí)例的登錄頁面(如果已登錄請先登出)。
點(diǎn)擊Manage Databases鏈接。這會導(dǎo)航至http://localhost:8069/web/database/manager(你也可以在瀏覽器中直接訪問這個(gè)URL)。
設(shè)置或修改master密碼
如果你已經(jīng)以默認(rèn)值設(shè)置了實(shí)例且尚未像下面講解的那樣做過修改,數(shù)據(jù)庫管理頁面會顯示一條警告,告訴你還沒有設(shè)置master密碼并建議你通過點(diǎn)擊鏈接來進(jìn)行設(shè)置:
你需要執(zhí)行如下步驟來設(shè)置master:
點(diǎn)擊Set Master Password按鈕。會彈出一個(gè)對話框來要求你提供新的 master 密碼:
輸入一個(gè)復(fù)雜的新密碼并點(diǎn)擊Continue
如果已設(shè)置了master密碼,點(diǎn)擊頁面底部的Set Master Password按鈕來進(jìn)行修改。在彈出的對話框中輸入老的master密碼再輸入新密碼,然后點(diǎn)擊Continue。
??master密碼是在admin_password鍵下的服務(wù)配置文件。如果啟動服務(wù)時(shí)沒有指定配置文件,新的配置會在~/.odoorc中生成。查看下一部分獲取更多有關(guān)配置文件的信息。
創(chuàng)建新數(shù)據(jù)庫
這個(gè)對話框用于創(chuàng)建一個(gè)由當(dāng)前Odoo服務(wù)處理的新數(shù)據(jù)庫實(shí)例:
在數(shù)據(jù)庫管理窗口,點(diǎn)擊頁面底部的Create Database按鈕:
?填寫表單,如下:
??如果你想使用該數(shù)據(jù)庫來運(yùn)行模塊的自動化測試(參見第八章 調(diào)試),你會需要有演示數(shù)據(jù),因?yàn)镺doo中的大多數(shù)自動化測試依賴于這些記錄來成功運(yùn)行。
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è)計(jì)時(shí)則不應(yīng)勾選。
點(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é)展示過這一做法。如果你有一個(gè)配置文件(參見本章后面的在一個(gè)文件中存儲實(shí)例配置一節(jié)),那么請檢查db_filter并未進(jìn)行設(shè)置或設(shè)置一個(gè)與新數(shù)據(jù)庫匹配的值。
復(fù)制數(shù)據(jù)庫
通常你已經(jīng)有一個(gè)數(shù)據(jù)庫了,你會想要使用它做一存儲過程的試驗(yàn)或運(yùn)行一個(gè)測試,但又不修改已有數(shù)據(jù)。這里的方案很簡單:復(fù)制該數(shù)據(jù)庫并在拷貝上運(yùn)行測試??梢园葱柚貜?fù)多次:
在數(shù)據(jù)庫管理頁面,在想要復(fù)制的數(shù)據(jù)庫旁點(diǎn)擊Duplicate Database 鏈接:
填寫表單如下:
Master Password:這是Odoo服務(wù)的master密碼
New Name:給予拷貝的名稱
點(diǎn)擊Continue按鈕。
你可以在數(shù)據(jù)庫管理頁面點(diǎn)擊新創(chuàng)建的數(shù)據(jù)庫名稱來訪問該數(shù)據(jù)庫的登錄頁面。
刪除數(shù)據(jù)庫
在完成測試之后,你會想要清理掉所復(fù)制的數(shù)據(jù)庫。通過如下步驟來進(jìn)行清理:
在數(shù)據(jù)庫管理頁面,點(diǎn)擊想刪除的數(shù)據(jù)庫名稱旁的Delete Database鏈接:
填寫表單并輸入 Master Password,即Odoo服務(wù)的master密碼。
點(diǎn)擊Delete按鈕。
??小心!數(shù)據(jù)丟失!
如果你選擇了錯(cuò)誤的數(shù)據(jù)庫,并且沒有備份,則無法恢復(fù)損失的數(shù)據(jù)。
備份數(shù)據(jù)庫
需執(zhí)行如下步驟來創(chuàng)建一個(gè)備份:
在數(shù)據(jù)庫管理頁面,點(diǎn)擊想要備份的數(shù)據(jù)庫旁的Backup Database鏈接:
填寫表單
Master Password:Odoo服務(wù)的master密碼。
Backup Format:對生產(chǎn)數(shù)據(jù)庫請保持使用zip,因?yàn)檫@是唯一真正的全量備份格式。僅在備份不關(guān)心文件存儲的開發(fā)數(shù)據(jù)庫時(shí)使用pg_dump格式。
點(diǎn)擊Backup。然后瀏覽器會下載備份文件。
恢復(fù)數(shù)據(jù)庫備份
如果你需要恢復(fù)一個(gè)備份,需要按如下步驟操作:
在數(shù)據(jù)庫管理頁面,點(diǎn)擊頁面詢問的Restore Database按鈕:
填寫表單:
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ù)庫是一個(gè)拷貝,這也是安全的默認(rèn)選項(xiàng)。
點(diǎn)擊Continue按鈕。
??不能在數(shù)據(jù)庫自身之上恢復(fù)數(shù)據(jù)庫。這么做會得到一條錯(cuò)誤消息(Database restore error: Database already exists)。你需要先刪除該數(shù)據(jù)庫。
運(yùn)行原理...
除Change master password以外的這些頁面上的功能,在服務(wù)器上運(yùn)行PostgreSQL運(yùn)維命令并通過網(wǎng)頁界面回報(bào)結(jié)果。
master密碼是非常重要的信息,存儲在Odoo服務(wù)的配置文件中,從不在數(shù)據(jù)庫中進(jìn)行存儲。曾經(jīng)有一個(gè)admin默認(rèn)值,但使用這個(gè)值是一個(gè)廣為人知的安全問題。在Odoo v9之后的版本中,這被識別為一個(gè)未設(shè)置的master密碼,并在訪問數(shù)據(jù)庫管理頁面時(shí)會敦促你修改密碼。雖然這在配置文件中以admin_passwd進(jìn)行存儲,它與admin的密碼是不同的,它們是兩個(gè)獨(dú)立的密碼。master密碼是為Odoo服務(wù)進(jìn)程設(shè)置的,進(jìn)程本身可以處理多個(gè)數(shù)據(jù)庫實(shí)例,每個(gè)實(shí)例都一個(gè)獨(dú)立的admin用戶及其自己的密碼。
??安全考慮:記住本章中我們所考慮的是開發(fā)環(huán)境。Odoo數(shù)據(jù)庫管理界面在我們運(yùn)行生產(chǎn)服務(wù)時(shí)是需要進(jìn)行安全保護(hù)的,因此不會給到太多的敏感信息的訪問權(quán)限,尤其是如果服務(wù)器托管了多個(gè)不同客戶端的Odoo實(shí)例時(shí)。這會在第三章 服務(wù)器部署中進(jìn)行講解。
Odoo使用PostgreSQL的createdb工具來新建數(shù)據(jù)庫,它通過和以空數(shù)據(jù)庫啟動Odoo時(shí)相同的方式調(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)頁界面時(shí),還要求你下載備份文件然后再重新上傳)。
備份和恢復(fù)備份操作分別使用pg_dump和pg_restore工具。在使用zip格式時(shí),備份還包含文件存儲的拷貝,其中為配置Odoo所不保存在數(shù)據(jù)庫中的文件的拷貝,這是12.0中的默認(rèn)選項(xiàng)。如果沒做過修改的話,這些文件存放在~/.local/share/Odoo/filestore中。
??如果備份很大,下載時(shí)會失敗。這可能是因?yàn)镺doo服務(wù)無法在內(nèi)存中處理這么大的文件或者是因?yàn)榉?wù)在反向代理之后運(yùn)行(參見第三章 服務(wù)器部署)而這個(gè)代理設(shè)置了HTTP請求大小的限制。反過來,出于某些原因,你可能會在恢復(fù)數(shù)據(jù)庫的操作中遇到問題。當(dāng)你開始碰到這些問題時(shí),是投入時(shí)間建立更健壯的外部備份方案的時(shí)候了。
更多內(nèi)容...
有經(jīng)驗(yàn)的Odoo開發(fā)人員通常不使用數(shù)據(jù)庫管理界面,而在命令行執(zhí)行相關(guān)操作。比如使用演示數(shù)據(jù)初始化新數(shù)據(jù)庫,可以使用如下的一行代碼:
$ createdb testdb && odoo-bin -d testdb
命令行的另一個(gè)彩蛋是你可以在使用時(shí)要求安裝一些插件,比如 -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)行如下命令來刪除一個(gè)實(shí)例:
$ dropdb dbname $ rm -rf ~/.local/share/Odoo/filestore/dbname
可運(yùn)行如下命令來創(chuàng)建一個(gè)備份(假設(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í)例使用了另一個(gè)用戶來連接數(shù)據(jù)庫,需要傳遞-U username來使用正確的用戶作為恢復(fù)數(shù)據(jù)庫的所有者。
在一個(gè)文件中存儲實(shí)例配置
odoo-bin有幾十個(gè)選項(xiàng),記住所有這些以及記得在啟動服務(wù)時(shí)適當(dāng)?shù)倪M(jìn)行配置會非常單調(diào)費(fèi)力。所幸可以將所有這些存儲在一個(gè)配置文件中,只需對想要修改的選項(xiàng)進(jìn)行手動修改,比如為開發(fā)環(huán)境。
如何配置
運(yùn)行如下命令來為你的Odoo實(shí)例生成一個(gè)配置文件:
$ ./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)行原理
啟動時(shí),Odoo通過三個(gè)步驟來加載它的配置。首先,所有選項(xiàng)的一組默認(rèn)值會從源碼中進(jìn)行初始化,然后解析配置文件,該文件中所定義的任意值會覆蓋默認(rèn)值。最后,會分析命令行選項(xiàng),它們的值會覆蓋前面步驟中所獲取的配置。
前面我們已提到,配置變量的名稱可通過刪除命令行選項(xiàng)的前置中間杠以及將中間的連接符轉(zhuǎn)換為下劃線來獲取。其中有一些例外,特別是下面這些:
[table id=3 /]
以下是通過配置文件設(shè)置的常用選項(xiàng)列表:
[table id=4 /]
譯者注:表中的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ā)之中:
[table id=5 /]
激活Odoo開發(fā)者工具
開發(fā)人員在使用Odoo時(shí),應(yīng)當(dāng)知道如何在網(wǎng)頁界面激活開發(fā)者模式,這樣你就可以訪問技術(shù)設(shè)置菜單及開發(fā)者信息。啟動調(diào)試模式會暴露出一些高級配置項(xiàng)及字段。在Odoo中隱藏這些選項(xiàng)和字段來獲取更佳的易用性,因?yàn)槿粘2粫褂玫剿鼈儭?/p>
如何激活
按照如下步驟來在網(wǎng)頁界面中激活開發(fā)者模式:
連接到你的實(shí)例并以 admin 登錄
訪問Settings菜單
找到Share the love版塊,應(yīng)該是在頁面的右手邊
譯者注:原書中使用企業(yè)版進(jìn)行截圖,Alan 將盡量全部使用社區(qū)版本進(jìn)行操作
?點(diǎn)擊Activate the developer mode鏈接
等待用戶界面重載
??其它方式:也可以通過編輯 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)分拆每一個(gè)具體文件,這將有助于調(diào)試,但相對于合并的靜態(tài)文件而言會損失一些加載速度
通過如下其中一種方式可退出開發(fā)者模式:
編輯URL并刪除該字符串
在開發(fā)者模式激活時(shí)使用Share the love版塊中的Deactivate the developer mode鏈接
很多開發(fā)者使用瀏覽器插件來切換調(diào)試者模式。通過使用插件,你可以無需訪問settings菜單快速地切換調(diào)試模板。這些插件可在Firefox和Chrome瀏覽器中使用。參見如下截圖,它有助于你在Chrome商店中找到該插件:
運(yùn)行原理
開發(fā)者模式中,會發(fā)生兩件事情:
鼠標(biāo)在表單視圖的字段上或列表視圖的列名上懸浮時(shí)會給出提示信息,提供有關(guān)字段的技術(shù)信息(內(nèi)部名稱、類型等)。
調(diào)試圖標(biāo)下拉菜單會顯示在右上角用戶菜單旁,給到顯示的模型相關(guān)技術(shù)信息的訪問,有各種關(guān)聯(lián)的視圖定義、工作流、自定義過濾管理等等。
開發(fā)模式有一個(gè)變體: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)建一個(gè)輕量的標(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>
仔細(xì)閱讀報(bào)錯(cuò)信息并將其保存到一個(gè)文件中,因?yàn)檫@稍后做漏洞報(bào)告時(shí)會有用。
如果你不能確定問題,將服務(wù)和Odoo源代碼恢復(fù)到上一個(gè)版本,我們已知這個(gè)本版本可用并在更新源碼版本前使用了標(biāo)簽進(jìn)行設(shè)置。
$ git reset --hard 12.0-before-update-$(date --iso)刪除出問題的數(shù)據(jù)庫并從所做的備份進(jìn)行恢復(fù)(參見本章的管理Odoo服務(wù)端數(shù)據(jù)庫一節(jié)獲取操作指南)。
重啟實(shí)例并告知用戶更新延遲了。
??注意在現(xiàn)實(shí)生活中,這絕不應(yīng)該發(fā)生在生產(chǎn)數(shù)據(jù)庫上,因?yàn)槟銘?yīng)該使用一個(gè)復(fù)制數(shù)據(jù)庫來對升級先進(jìn)行測試、修復(fù)問題,并僅在確保其運(yùn)行沒有問題時(shí)在生產(chǎn)服務(wù)器上進(jìn)行升級。但是有時(shí)還是會中招,所以即便你很確定,還是要做備份。
運(yùn)行原理
更新源碼要確保使用git checkout來確定我們處于正確的分支上,然后使用git pull獲取最新的代碼。如果本地做了提交卻沒有在遠(yuǎn)程倉庫中時(shí)--ff-only會產(chǎn)生錯(cuò)誤。如果發(fā)生了這一錯(cuò)誤且你想要保留自己的修改,你可以使用git pull(不加--ff-only)來將遠(yuǎn)程的修改與你自己的進(jìn)行合并。如果不保留,使用 git reset --hard origin/12.0來強(qiáng)制更新,這會丟失掉本地的修改。
更新命令使用如下選項(xiàng):
-c:指定配置文件
--stop-after-init:在更新結(jié)束時(shí)停止實(shí)例
-u base或--update base:請求base模塊的更新
在更新模塊時(shí),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。
?