python - deploy - Pasa los parámetros de la línea de comandos al script uwsgi
uwsgi flask (3)
Podría usar un archivo .ini con la configuración pyargv que @roberto mencionó. Llamemos a nuestro archivo de configuración uwsgi.ini
y utilicemos el contenido:
[uwsgi]
wsgi-file=/path/to/test_uwsgi.py
pyargv=human
Entonces vamos a crear una aplicación WGSI para probarlo:
import sys
def application(env, start_response):
start_response(''200 OK'', [(''Content-Type'',''text/html'')])
return [str.encode("Hello " + str(sys.argv[1]), ''utf-8'')]
Puede ver cómo cargar este archivo https://uwsgi-docs.readthedocs.io/en/latest/Configuration.html#loading-configuration-files :
uwsgi --ini /path/to/uwsgi.ini --http :8080
Luego, cuando hacemos un curl
la aplicación, podemos ver que nuestro parámetro se repite:
$ curl http://localhost:8080
Hello human
Si está intentando pasar argumentos de estilo argparse a su aplicación WSGI, también funcionan bien en el .ini
:
pyargv=-y /config.yml
Estoy tratando de pasar argumentos a una aplicación wsgi de ejemplo,
config_file = sys.argv[1]
def application(env, start_response):
start_response(''200 OK'', [(''Content-Type'',''text/html'')])
return [b"Hello World %s" % config_file]
Y correr:
uwsgi --http :9090 --wsgi-file test_uwsgi.py -???? config_file # argument for wsgi script
¿De alguna manera inteligente puedo lograrlo? No se pudo encontrar en los documentos uwsgi. Tal vez hay otra forma de proporcionar algunos parámetros a la aplicación wsgi? (las variables env están fuera de alcance)
Python Args:
--pyargv "foo bar"
sys.argv
[''uwsgi'', ''foo'', ''bar'']
Opciones de uwsgi:
--set foo = bar
uwsgi.opt[''foo'']
''bar''
Terminé usando una variable env pero configurándola dentro de un script de inicio:
def start(uwsgi_conf, app_conf, logto):
env = dict(os.environ)
env[TG_CONFIG_ENV_NAME] = app_conf
command = (''-c'', uwsgi_conf, ''--logto'', logto, )
os.execve(os.path.join(distutils.sysconfig.get_config_var(''prefix''),''bin'', ''uwsgi''), command, env)