menu Chancel's blog
rss_feed
Chancel's blog
秋雨一何碧,山色倚晴空。

uwsgi 启动Flask应用解析argparse参数

类型:Python
创建时间:2022-01-11 15:47:32
更新时间:2022-01-11 15:47:32
类型:Python
更新时间:2022-01-11 15:47:32

在部署SyncMemo时采用了uwsgi+supervisor的形式进行部署

uwsgi采用配置文件形式,如下

[uwsgi]
module = main:app
master = true
processes = 1
chdir = /srv/memo/SyncMemo/src/
socket = /srv/memo/uwsgi.sock
chmod-socket = 660
vacuum = true

die-on-term = true

supervisor配置如下

[program:memo]
# directory=/opt/blog/src/
command=/var/www/.local/bin/uwsgi --ini /srv/memo/uwsgi.ini
autostart=true
autorestart=true
startsecs=10
stdout_logfile=/var/log/supervisor/memo_stdout.log
stdout_logfile_maxbytes=10MB
stdout_logfile_backups=10
stdout_capture_maxbytes=1MB
stderr_logfile=/var/log/supervisor/memo_stderr.log
stderr_logfile_maxbytes=10MB
stderr_logfile_backups=10
stderr_capture_maxbytes=1MB
user=apps

SyncMemo的APP入口处,使用了“argparse”来解析传递的config参数,方便识别app.conf文件的路径

from configparser import ConfigParser
from flask_caching import Cache
import sys
import os
import argparse

CONST_VERSION = 'V1.2.0'
CONST_ARGS_CACHE_NAME = 'CONST_ARGS_CACHE_NAME'

parser = argparse.ArgumentParser(description='Syncmemo for argparse')
parser.add_argument('--config', '-c', help='配置文件路径', default='config.ini')
args = parser.parse_args()
configparser = ConfigParser()
if not os.path.exists(args.config):
    print("配置文件%s不存在!请检查配置文件" % args.config)
    sys.exit()
configparser.read(args.config, encoding='utf-8')

app = Flask(__name__)
app.config['JSON_AS_ASCII'] = False

开发时启动方式如下

python3 SyncMemo/src/main.py --config=SyncMemo/conf/app.conf

相应的,开发采用uwsgi部署的时候,uwsgi也提供类似的参数用于传递参数,在uwsgi的配置文件中增加“pyargv”参数用于传递app.conf的位置

[uwsgi]
module = main:app
master = true
processes = 1
pyargv=-c /srv/memo/SyncMemo/conf/app.conf

chdir = /srv/memo/SyncMemo/src/
socket = /srv/memo/uwsgi.sock
chmod-socket = 660
vacuum = true

die-on-term = true

[[replyMessage== null?"发表评论":"@" + replyMessage.m_author]]

account_circle
email
web_asset
textsms

评论列表([[messageResponse.total]])

[[messageItem.m_author]] [[messageItem.m_author]]
[[messageItem.create_time]]
[[getEnviron(messageItem.m_environ)]]
[[subMessage.m_author]] [[subMessage.m_author]] @ [[subMessage.parent_message.m_author]] [[subMessage.parent_message.m_author]]
[[subMessage.create_time]]
[[getEnviron(messageItem.m_environ)]]