@skyway
2016-08-18T08:09:11.000000Z
字数 3430
阅读 1048
work
【注】有疑问的地方都通过加粗+???标明了
//requirements.txt
Babel==1.3
Flask==0.9
Flask-Assets==0.9
Flask-Babel==0.8
Flask-Cache==0.9.2
Flask-Celery==2.4.3
Flask-DebugToolbar==0.9.0
Flask-Mail==0.7.4
Flask-Principal==0.3.5
Flask-SQLAlchemy==0.16
Flask-Script==0.5.2
Flask-Uploads==0.1.3
Flask-WTF==0.8.3
Jinja2==2.7.2
MarkupSafe==0.23
Paste==1.7.4
PyMySQL==0.5
PyYAML==3.10
SQLAlchemy==1.0.8
WTForms==2.0.1
Werkzeug==0.9.4
amqp==1.0.13
anyjson==0.3.3
argparse==1.2.1
billiard==2.7.3.34
blinker==1.3
celery==3.0.24
cssmin==0.2.0
gunicorn==0.17.4
importlib==1.0.3
iniparse==0.3.1
itsdangerous==0.24
jsmin==2.0.11
kombu==2.5.16
msgpack-python==0.1.9
ordereddict==1.1
pycrypto==2.0.1
pycurl==7.19.0
python-dateutil==2.2
python-ldap==2.4.10
pytz==2010h
pyzmq==2.2.0.1
redis==2.7.2
requests==2.3.0
salt==0.11.1
simplejson==2.0.9
six==1.7.2
speaklater==1.3
sunburnt==0.6
webassets==0.9
数据库master与slave
目前config中只有一个数据库,没有master和slave的区分。本地使用use_master=True时数据库操作db.session().using_bind("master")
失败报错。线上环境use_master=True不会出错吗?
@celery.task(name="cmdb.ci_cache", queue="cmdb_async")
def ci_cache(ci_id):
time.sleep(0.1)
db.session.close()
m = lib.ci.CIManager()
# 线上
# ci = m.get_ci_by_id(ci_id, need_children=False, use_master=True)
# 本地修改后
ci = m.get_ci_by_id(ci_id, need_children=False, use_master=False)
rd.delete(ci_id)
rd.add({ci_id: json.dumps(ci)})
current_app.logger.info("%d caching.........." % ci_id)
配置文件
config中有broker配置,但是线上celery初始化时并未使用,且本地无法找到init_app函数?(线下使用的线上的celery版本)
// __init__.py
def configure_extensions(app):
db.app = app
# 线上
# celery.init_app(app)
db.init_app(app)
mail.init_app(app)
cache.init_app(app)
# 本地修改后
celery.__init__(app, broker="redis://127.0.0.1//")
celery.conf.update(app.config)
本地执行时必须定义cache的type,否则set无效,线上初始化时没有看cache到进行相关配置?
// extenssion.py
mail = Mail()
db = SQLAlchemy()
# 线上
# cache = Cache()
# 本地修改后
cache = Cache(config={'CACHE_TYPE': 'redis'})
celery = Celery()
程序问题
返回值个数多于接收变量个数,只有在缓存无效时才会触发
// product.py
def get_all_products(self, page, per_page=None):
# 线上
#if self.ci_type is None:
# return 0, 0, page, []
# 本地修改后
if self.ci_type is None:
return 0, 0, []
numfound, page, cis = CIManager().get_cis_by_type(
self.ci_type.type_id, page=page, per_page=per_page)
return numfound, len(cis), cis
[root@cmdb05 cmdb-api]# ps -ef | grep python
root 877 12032 6 03:00 ? 00:48:31 python manage.py run
root 1227 1 0 2015 ? 01:21:38 /usr/bin/python /usr/bin/certmaster --daemon
root 1374 1 0 2015 ? 00:39:39 /usr/bin/python /usr/bin/salt-minion -d
root 3267 12032 6 14:00 ? 00:08:41 python manage.py run
root 4969 12032 6 06:00 ? 00:38:44 python manage.py run
root 8330 12032 7 09:00 ? 00:30:39 python manage.py run
root 11822 12032 6 12:00 ? 00:16:44 python manage.py run
root 11930 11901 0 Aug11 ? 00:17:25 python manage.py celeryd -Q cmdb_async
root 11948 11930 0 Aug11 ? 00:35:57 python manage.py celeryd -Q cmdb_async
root 11949 11930 0 Aug11 ? 00:35:45 python manage.py celeryd -Q cmdb_async
root 11950 11930 0 Aug11 ? 00:37:18 python manage.py celeryd -Q cmdb_async
root 11951 11930 0 Aug11 ? 00:36:23 python manage.py celeryd -Q cmdb_async
root 12032 12003 0 Aug11 ? 00:02:05 python manage.py run
root 21460 12032 6 02:00 ? 00:52:01 python manage.py run
root 26518 26495 0 16:00 ? 00:00:00 python cmdb_agent.py
root 26759 12032 8 16:00 ? 00:00:34 python manage.py run
root 27872 1 0 Aug14 ? 00:00:00 /usr/bin/python /usr/bin/funcd --daemon
root 28060 27943 0 16:07 pts/1 00:00:00 grep python
root 28834 12032 6 08:00 ? 00:33:04 python manage.py run
上面提到配置文件问题,本地修改后可以按下面指令运行起来
$ python manage.py celeryd
$ python manage.py runserver
但是线上需要怎么操作?
pull代码到A
pkill所有python程序???
部署问题了解清楚了的话,扩容相当于增加一台机器,运行cmdb然后添加到nginx???