Odoo中文网|Odoo实施培训

 找回密码
 立即注册
搜索
热搜: Odoo OpenERP 实施
查看: 12856|回复: 4
打印 上一主题 下一主题

搭建Ubuntu+Pycharm+Odoo8开发调试环境

  [复制链接]

1

主题

4

帖子

21

积分

新手上路

Rank: 1

积分
21
跳转到指定楼层
楼主
发表于 2015-8-28 15:37:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
        可以在windows或者Linux平台上履行odoo8的开发和调试任务,工具可以选择ecplise+pydev或者pycharm+java sdk,前者是免费的,而pycharm专业版是收费的,社区版是免费的,但是社区版功能要弱一些,pycharm专业版允许无偿使用1个月,之后就必须购买序列号,不过破解它也是容易的。pycharm是专门针对python语言的集成可视化开发环境,相对于ecplise的pydev插件更专业一些,但是ecplise的开发界面更通用一些,因为只要安装相应的插件,ecplise可以用来开发任何语言的程序了,比如c, c++, java, php, python,......
本文搭建采用:ubuntu 14.04 LTS 32位桌面版,  pycharm 4.0.3专业版, jdk-8u25-linux-i586.rpm

1、安装基本的包
# sed -i 's|cn.archive.ubuntu.com|mirrors.aliyun.com|g'  /etc/apt/sources.list
# apt-get update && apt-get -y upgrade && apt-get -y install vim python-pip
# apt-get install -y python-dateutil python-feedparser python-ldap python-libxslt1 python-lxml python-mako python-openid python-psycopg2 python-pybabel python-pychart python-pydot python-pyparsing python-reportlab python-simplejson python-tz python-vatnumber python-vobject python-webdav python-werkzeug python-xlwt python-yaml python-zsi python-docutils python-psutil python-mock python-unittest2 python-jinja2 python-pypdf python-decorator python-passlib
# pip install gdata
# apt-get install python-gevent
# pip install psycogreen                                                ---- odoo的在线聊天要使用这个包和上一步安装的python-gevent包
# echo 'LANG="zh_CN.UTF-8"'>/etc/default/locale #解决文件的修改日期乱码的问题
# echo 'LANGUAGE="zh_CN:zh"'>>/etc/default/locale
# update-grub2

2、安装和配置数据库
# apt-get -y install postgresql
# /etc/init.d/postgresql restart
# sudo -u postgres psql -e --command "CREATE USER odoo WITH SUPERUSER PASSWORD 'odoo_pass'"

3、准备odoo8源码
# mkdir -p  /opt/dev/custom-addons && cd /opt/dev && git clone -b 8.0 https://github.com/odoo/odoo.git
# mv odoo odoo8 && mkdir /opt/dev/odoo8/odoo-config
# cp /opt/dev/odoo8/debian/openerp-server.conf /opt/dev/odoo8/odoo-config/
# cat >/opt/dev/odoo8/odoo-config/openerp-server.conf <<E'O'F
[options]
; This is the password that allows database operations:
; admin_passwd = admin
db_host = localhost
db_port = 5432
db_user = odoo
db_password = odoo_pass
addons_path = /opt/dev/odoo8/addons,/opt/dev/custom-addons
timezone = Asia/Shanghai
list_db = False
xmlrpc_port = 80
workers = 2
db_template = module_db
dbfilter = %d_db
EOF
如果没有xmlrpc_port参数,那么默认就是8069(参见程序/opt/dev/odoo8/openerp/tools/coonfig.py中的语句group.add_option("--xmlrpc-port", dest="xmlrpc_port", my_default=8069,help="specify the TCP port for the XML-RPC protocol", type="int"))。
参数list_db = False、db_template = module_db和dbfilter = %d_db主要用来把odoo配置成SaaS模式,list_db=False参数使得用户不能在登录界面上看到全部的套帐(数据库),因此无法选择套帐;dbfilter = %d_db参数指定:根据访问域名选择套帐,比如域名是www.xyz.com,那么选择的套帐就是xyz_db,另外的选择器%h表示整个域名,这对于SaaS形式的odoo非常有用。

4、安装pycharm
Pycharm需要JAVA JDK,从http://www.oracle.com/technetwor ... SourceSiteId=ocomen下载最新的JDK到/opt/dev/,比如jdk-8u25-linux-i586.rpm
# apt-get install -y alien                                ----在ubuntu上需要采用工具alien来安装rpm格式的包
# alien -i -c /opt/dev/jdk-8u25-linux-i586.rpm                        -----注意:本命令要根据下载的具体文件名来定。
# java -version           ----查看java的版本信息
http://www.jetbrains.com/pycharm/download/下载最新专业版的Pycharm到/opt/下,可以试用30天,之后可以破解。
# cd /opt/ && tar -xzf pycharm-professional-4.0.3.tar.gz
# mv pycharm-4.0.3 pycharm
以后在图形的Linux桌面上运行/opt/pycharm/bin/pycharm.sh就可以启动可视化的python开发界面了。

回复

使用道具 举报

1

主题

4

帖子

21

积分

新手上路

Rank: 1

积分
21
沙发
 楼主| 发表于 2015-8-28 15:39:42 | 只看该作者
本帖最后由 sswnszpyxr 于 2015-8-28 15:40 编辑

5、在pycharm中导入odoo项目

初始启动pycharm,在图形命令窗口中执行/opt/pycharm/bin/pycharm.sh



点击“Open…”打开并导入目录/opt/dev/odoo8,在集成开发环境中点击菜单“Run-->Resume Program”或者直接按F9,出现:


点击Edit Configurations…,新建一个启动配置:


这样在pycharm中启动odoo,对应的命令就是/opt/dev/odoo8/odoo.py --config=/opt/dev/odoo8/odoo-config/openerp-server.conf

下面是pycharm的集成开发调试界面。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

1

主题

4

帖子

21

积分

新手上路

Rank: 1

积分
21
板凳
 楼主| 发表于 2015-8-28 15:42:09 | 只看该作者
sswnszpyxr 发表于 2015-8-28 15:39
5、在pycharm中导入odoo项目

初始启动pycharm,在图形命令窗口中执行/opt/pycharm/bin/pycharm.sh


二、开始调试

1、odoo服务启动分析。

由于启动服务的命令是/opt/dev/odoo8/odoo.py --config=/opt/dev/odoo8/odoo-config/openerp-server.conf,所以我们从跟踪odoo.py开始,在pycharm集成环境中双击odoo.py打开文件:



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中)来处理后台任务。
application(environ, start_response)函数调用application_unproxied(environ, start_response)函数,这是WSGI服务的总入口,它又调用environment.manage()方法创建本地环境数据集(如数据库访问参数和本地缓存),其中数据库参数:cr-数据库游标,uid-用户id号,context-当前上下文的字典。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

1

主题

4

帖子

21

积分

新手上路

Rank: 1

积分
21
地板
 楼主| 发表于 2015-8-28 15:59:37 | 只看该作者
sswnszpyxr 发表于 2015-8-28 15:42
二、开始调试

1、odoo服务启动分析。


2、odoo.py的运行参数

打开文件openerp/tools/config.py,可以看到很多服务启动时用到的参数,这些参数可以在配置文件中定义,也可以在odoo.py的命令行上指定,一些重要的参数如下:



一般我们设计好一个具备基本功能的数据库(套帐),比如module_db,作为数据库模板,并定义在配置文件中。

db_host = localhost

db_port = 5432

db_user = odoo

db_password = odoo_pass

db_template = module_db

addons_path = /opt/dev/odoo8/addons,/opt/dev/custom-addons

publisher_warranty_url = False

timezone = Asia/Shanghai

list_db = False

; xmlrpc_interface = 192.168.0.12

xmlrpc_port = 80

workers = 4

3、用户浏览网页的过程

打开网页http://hostname:8069被自动重定向到http://hostname:8069/web,这是由/opt/dev/odoo8/addons/web模块处理的,我们重点检查文件controllers/main.py,看到里面的代码:

@http.route('/', type='http', auth="none")

def index(self, s_action=None, db=None, **kw):

return http.local_redirect('/web', query=request.params, keep_hash=True)

@http.route('/web', type='http', auth="none")

def web_client(self, s_action=None, **kw):

ensure_db() #选择和管理数据库

if request.session.uid:

if kw.get('redirect'):

return werkzeug.utils.redirect(kw.get('redirect'), 303)

if not request.uid:

#在同一台电脑上已经登录的用户

request.uid = request.session.uid

menu_data = request.registry['ir.ui.menu'].load_menus(request.cr, request.uid, context=request.context)   #获取菜单数据

return request.render('web.webclient_bootstrap', qcontext={'menu_data': menu_data})    #调用模板webclient_bootstrap渲染成网页并返回给用户

else:

#还没有登录的用户

return login_redirect()

由此可见,渲染会调用web.webclient_bootstrap模板(在/opt/dev/odoo8/addons/web/views/webclient_templates.xml中定义),模板中采用的样式定义在文件/opt/dev/odoo8/addons/web/static/src/css/base.css中。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

15

主题

35

帖子

140

积分

版主

Rank: 7Rank: 7Rank: 7

积分
140
5#
发表于 2015-8-29 20:09:23 | 只看该作者
不错,加油,再接再励
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|技术支持|开发手册|Odoo中文网-远鼎旗下odoo培训网站 ( 苏ICP备15039516号 )

GMT+8, 2024-4-26 20:19 , Processed in 0.021782 second(s), 14 queries , Xcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表