サンプルのwsgiアプリケーションに引数を渡そうとしています:
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]
そして実行します:
uwsgi --http :9090 --wsgi-file test_uwsgi.py -???? config_file # argument for wsgi script
私がそれを達成できる賢い方法はありますか? uwsgiのドキュメントで見つかりませんでした。たぶん、wsgiアプリケーションにいくつかのパラメーターを提供する別の方法がありますか? (環境変数は範囲外です)
python引数:
--pyargv "foo bar"
sys.argv
['uwsgi', 'foo', 'bar']
uwsgiオプション:
--set foo = bar
uwsgi.opt['foo']
'bar'
@robertoが言及したpyargv
設定で.iniファイルを使用できます。設定ファイルuwsgi.ini
を呼び出して、次のコンテンツを使用してみましょう。
[uwsgi]
wsgi-file=/path/to/test_uwsgi.py
pyargv=human
次に、それをテストするためのWGSIアプリを作成しましょう。
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')]
このファイルをロードする方法を見ることができます https://uwsgi-docs.readthedocs.io/en/latest/Configuration.html#loading-configuration-files :
uwsgi --ini /path/to/uwsgi.ini --http :8080
次に、アプリをcurl
すると、パラメータがエコーバックされるのを確認できます。
$ curl http://localhost:8080
Hello human
Argparseスタイルの引数をWSGIアプリに渡そうとしている場合、それらは.ini
でも問題なく機能します。
pyargv=-y /config.yml
最終的にenv変数を使用しましたが、開始スクリプト内に設定しました。
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)