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”前的那个点,这样就触发了事件了,见下图: