來自:http://www.veryopen.org/?cat=21
這篇文章非常詳細的介紹了搭建odoo開發調試環境。
7. 安裝pycharm
登陸Linux圖形桌面並且打開一個終端窗口:
執行如下命令:
root@OdooDev:~/odoo-8.0# cd $HOME/install_softwares
root@OdooDev:~/install_softwares# tar -zxf pycharm-professional-4.0.5.tar.gz -C ../
root@OdooDev:~/install_softwares# cd ../pycharm-4.0.5/bin/
root@OdooDev:~/pycharm-4.0.5/bin# ./pycharm.sh
下面開始導入odoo的源代碼,指定其目錄即可。
點擊上圖中右上角的“Configure Python Interpreter”,配置python解釋器爲python2.7,然後pycharm根據python2.7建立索引,幾分鐘後出現如下的界面:
點擊右上角的“Install requirements”安裝依賴的python插件,安裝過程很可能報錯。配置openerp-server的啓動參數,見下圖:
如下圖所示定義數據源:
下面的圖直接點擊“OK”。
到此,pycharm安裝完畢,並且導入了odoo工程項目,以後啓動pycharm的方法是:操作系統菜單“應用程序à編程àPycharm”。
最後我們來漢化pycharm,從這裏http://yunpan.cn/cZML53YDGHskx(訪問密碼 03a4)下載,漢化的官方網站是https://github.com/Jythoner/pycharm。解壓之後把resources_zh_CN.jar拷貝到pycharm安裝目錄下的lib目錄下,重啓pycharm即可。
快捷鍵:
8. 調試odoo後端python代碼
在調試odoo8之前,不要單獨啓動odoo8服務。
§8.1 進入odoo.py的shell命令模式(odoo 9纔有)
./odoo.py shell -d odoo9_db -r odoo -w pass123 --db_host=127.0.0.1 -c openerp-server.conf
>>> dir() ----返回當前腳本的所有名字,其中openerp和self,可以進一步列,如dir(openerp)、dir(self)
>>> print self ----查看當前模塊,默認是res.users。
>>> dir(openerp) -----查看模塊openerp定義的名字和函數。
>>> help() ----進入幫助界面。
>>> help(openerp.osv.orm.Model.browse) ----獲取browse()函數的幫助
>>> self.search_read([('id','=',1)],['name']) ----查看錶res_users中id爲1的用戶的名字。
>>> self.pool.get('neon.asset').browse([1,2])
§8.2 服務啓動過程跟蹤
Odoo.py定一了一系列的函數,最後兩條語句是執行總路口,我們在main()處設置斷點,然後開始跟蹤調試,結果如下:
odoo.py>main():導入openerp,然後執行openerp/cli/__init__.py>main(),然後執行openerp/cli/server.py>main(args),>check_root_user()檢查是否是根用戶,如果是,則退出。由於我們是用root用戶登錄linux並做調試工作的,所以openerp/cli/server.py有一條語句改爲 “if pwd.getpwuid(os.getuid())[0] == 'root1' :”,這樣root用戶也能運行odoo服務了。
openerp/tools/config.py>parse_config(args)分析配置文件(--config=/opt/dev/odoo8/odoo-config/openerp-server.conf)。
check_postgres_user()檢查是否是postgres數據庫用戶,如果是則退出。
report_configuration()打印OpenERP版本信息,addons路徑,數據庫登錄信息。
openerp/service/server.py>start(preload=None,stop=False):
裝載全局模塊(模塊由--load命令行參數或server_wide_modules指定,默認模塊是web,web_kanban),執行run(),執行start(),再執行http_spawn(self),開始監聽80或者8069端口了,在執行run()時傳遞了application函數(在openerp/service/wsgi_server.py中定義)。服務器有三種(默認是ThreadedServer),在windows下只有ThreadedServer支持:
GeventServer if sys.modules.get("gevent").
PreforkServer if workers is defined in configuration.
ThreadedServer if none of the above are true.
文件openerp/service/server.py中定義了ThreadedServer服務器對應的類,類中方法run()完成:調用start()產生一個http線程和2個cron線程。http線程調用http_thread產生Werkzeug wsgi 守護服務進程,所有的web請求被傳遞給application函數(在openerp/service/wsgi_server.py中定義)。cron線程爲每個數據庫(套帳)每隔60秒鐘調用_acquire_job(db_name)方法(方法的類ir_cron定義在openerp/addons/base/ir/ir_cron.py中)來處理後臺任務。啓動大概流程見下面的圖。
§8.3 跟蹤後端網頁動作
在用pycharm 4調試odoo8時,odoo服務程序監聽8072端口,而不是80,但當在pycharm裏運行odoo8時又是監聽80端口。我們都知道8072端口是支持在線聊天的。既然監聽8072,那麼我們就乾脆訪問http://<ip>:8072,但是網頁長時間打不開。我們在/root/odoo-8.0/openerp/service/wsgi_server.py的application()函數內第一條語句處設置斷點,然後debug運行odoo服務,並且在瀏覽器打開網頁,可以開始跟蹤了。有外國朋友說修改文件/root/odoo-8.0/openerp/__init__.py,參照下圖註釋掉兩行:
然後調試odoo就是監聽80端口了,而且瀏覽網頁也正常,跟蹤也順利。但是又產生了一個新的問題:在pycharm中運行odoo,監聽8072端口了。下圖供參考。
§8.4 調試模塊
模塊名就是模塊文件所在的目錄名,當調試模塊時,需要不斷地修改代碼,並在odoo中升級模塊,才能看到修改後的效果。升級模塊有兩種方式,一種是在odoo的“設置”菜單中完成,一種可在啓動odoo服務時升級,後一種方法比較快捷,帶參數 -u 模塊名 啓動Odoo服務即可,比如:
./odoo.py -c openerp-server.conf -u neon_asset
其中neon_asset是我開發的資產管理模塊。
9. 調試odoo前端js代碼
前端調試要結合chrome和其插件,同時最好配置goagent翻牆軟件,因爲後續的js調試插件JetBrains IDE Support需要翻牆才能下載。
§9.1 安裝和配置chrome瀏覽器
root@OdooDev:~/install_softwares# dpkg -i google-chrome-stable_current_i386.deb
如果此時直接啓動chrome瀏覽器,那麼就會報錯:
我們的解決辦法是:
root@OdooDev:~/install_softwares# mkdir $HOME/.chrome
root@OdooDev:~/install_softwares# vim /usr/bin/google-chrome
這樣就可以正常啓動chrome瀏覽器了。
§9.2 配置goagent翻牆工具
從這裏http://t.cn/RwuUMo2下載(密碼29b9),然後解壓到/opt/GoAgent-323/目錄下。參照裏面的操作說明配置,對於Linux系統,注意以下幾點:
root@OdooDev:~# apt-get -y install python-vte
root@OdooDev:~# python2.7 /opt/GoAgent-323/local/addto-startup.py
這一步是添加開機自動啓動翻牆軟件,也可以手工啓動,採用命令python2.7 /opt/GoAgent-323/local/goagent-gtk.py或者python2.7 /opt/GoAgent-323/local/proxy.py
下面還要手工導入證書:
打開 Chrome 瀏覽器 >設置 > 顯示高級設置… > HTTPS/SSL > 管理證書… > 授權中心> 導入… > 導入/opt/GoAgent-323/local目錄下的 CA.crt 證書 > Edit trust settings 全部選中 > 重啓瀏覽器
PS: goagent目前不穩定,我直接採用藍燈(lantern)翻牆工具,速度快,還比較穩定,本博客的第一篇文章中有下載鏈接。
§9.3 調試前端js腳本
參照下圖增加js調試配置:
點擊“OK”後會提示需要在chrome瀏覽器中安裝插件JetBrains IDE Support。調試時在pycharm中正常運行或者調試運行odoo8或者在系統命令窗口運行odoo8服務(root@OdooDev:~/odoo-8.0# ./odoo.py -c openerp-server.conf),然後在pycharm中調試運行js debug:
pycharm會自動啓動chrome瀏覽器,如下圖所示:
對於網站的前端調試,我還是喜歡使用chrome開發者工具或者與firefox集成的FireBug,後者有中文版,使用更人性化一些。下面簡單介紹下安裝和使用FireBug。先從http://download.firefox.com.cn/releases/stub/official/zh-CN/Firefox-latest.exe下載Firefox下載瀏覽器並安裝它,安裝完之後啓動firefox瀏覽器,點擊右上角的菜單(那個“三”的小圖標),然後點擊“添加組件”,再然後搜索firebug,搜到之後直接安裝這個組件即可。最後在firefox瀏覽器的靠近右上角的地方出現一個小蟲子的圖標就是FireBug了,見下圖:
現在進入odoo的商城下單,直到如下付款的界面:
選擇不同的付款方法,那個“現在支付”按鈕下的信息就會改變,那麼現在我們來找找改變這些信息的代碼在哪裏。
第一種方法:點擊那個小蟲子打開firebug界面,然後依次參照圖中的1、2、3操作:
上圖中已經告訴我們執行的js函數,我們雙擊這個函數打開包含這個函數的那個js文件,並定位到目標函數。js文件一般是經過壓縮的,可讀性極差,點擊“{}”整理代碼,如下圖所示:
第二種方法:參見下圖操作。
然後再點擊“PayPal”前的那個點,這樣就觸發了事件了,見下圖: