假设我按照http://gunicorn.org/deploy.html#runit在gunicorn下启动Flask应用程序,有没有办法让我包含/解析/访问其他命令行参数?
例如,我可以以某种方式在Flask应用程序中包含和解析foo
选项吗?
gunicorn mypackage:app --foo=bar
谢谢,
答案 0 :(得分:27)
您无法直接传递命令行参数,但您可以轻松地选择应用程序配置。
$ gunicorn 'mypackage:build_app(foo="bar")'
将调用函数" build_app"通过foo =" bar" kwarg如预期的那样。然后,此函数应返回将被使用的WSGI callable。
答案 1 :(得分:3)
我通常在__init.py__
之后将其放入main()
,然后我可以使用或不使用gunicorn(假设您的main()
也支持其他功能)。
# __init__.py
# Normal entry point
def main():
...
# Gunicorn entry point generator
def app(*args, **kwargs):
# Gunicorn CLI args are useless.
# https://stackoverflow.com/questions/8495367/
#
# Start the application in modified environment.
# https://stackoverflow.com/questions/18668947/
#
import sys
sys.argv = ['--gunicorn']
for k in kwargs:
sys.argv.append("--" + k)
sys.argv.append(kwargs[k])
return main()
通过这种方式,你可以简单地运行。
gunicorn 'app(foo=bar)' ...
并且您的main()
可以使用期望sys.argv
中的参数的标准代码。