やってみよう!
今回動かすアプリ
単純に、指定されたファイルをダウンロードさせるだけのアプリを書いた。
# encoding: utf-8 from bottle import route, static_file, abort, run, default_app import os # root @route('/') def index(): abort(404, "File not found.") # /path/to/file @route('/') def static(path): file_path = os.path.join("./storage", path) if os.path.isfile(file_path): return static_file(path, root='./storage', download=True) else: abort(404, "File not found.") if __name__ == '__main__': run(host='localhost', port='8080', debug=True, reloader=True) else: application = default_app()
run
関数が直接 python index.py
したとき用の記述で、application = default_app()
が uWSGI 用の記述。
下準備
uWSGI で動かす前に、実行用の環境を env という名前で作っておく。
takatoh@apostrophe $ ls index.py requirements.txt takatoh@apostrophe $ virtualenv env New python executable in env/bin/python Installing setuptools, pip, wheel...done. takatoh@apostrophe $ source env/bin/activate (env)takatoh@apostrophe $ pip install -r requirements.txt Collecting bottle==0.12.10 (from -r requirements.txt (line 1)) /home/takatoh/w/myapp/env/local/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:90: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning. InsecurePlatformWarning Using cached bottle-0.12.10-py2-none-any.whl Installing collected packages: bottle Successfully installed bottle-0.12.10 /home/takatoh/w/myapp/env/local/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:90: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning. InsecurePlatformWarning You are using pip version 7.1.2, however version 9.0.1 is available. You should consider upgrading via the 'pip install --upgrade pip' command. (env)takatoh@apostrophe $ deactivate
それから、storage という名前のディレクトリを作って、ファイル(101_ObjectCategories.tar.gz)を入れておく。これをダウンロードしてみようってわけだ。
uWSGIで起動
まずは、コマンドラインから起動してみる。
takatoh@apostrophe $ uwsgi --http :8080 --wsgi-file index.py -H env
ダウンロードできるか、テスト。
takatoh@apostrophe $ wget http://localhost:8080/101_ObjectCategories.tar.gz --2016-11-24 20:33:35-- http://localhost:8080/101_ObjectCategories.tar.gz localhost (localhost) をDNSに問いあわせています... 127.0.0.1 localhost (localhost)|127.0.0.1|:8080 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 200 OK 長さ: 131740031 (126M) [application/x-tar] `101_ObjectCategories.tar.gz' に保存中 100%[======================================>] 131,740,031 68.1MB/s 時間 1.8s 2016-11-24 20:33:37 (68.1 MB/s) - `101_ObjectCategories.tar.gz' へ保存完了 [131740031/131740031]
出来た。以前、Flask アプリを動かした時より簡単だな。
設定ファイルで起動
uWSGI 用の設定ファイル。
[uwsgi] uid = takatoh gid = takatoh http = :8080 venv = /home/takatoh/w/myapp/env wsgi-file = /home/takatoh/w/myapp/index.py master=true pidfile=/home/takatoh/w/myapp/myapp.pid logger=file:/home/takatoh/w/myapp/myapp.log
起動。
takatoh@apostrophe $ uwsgi uwsgi.ini [uWSGI] getting INI configuration from uwsgi.ini
ダウンロードのテスト。
takatoh@apostrophe $ wget http://localhost:8080/101_ObjectCategories.tar.gz --2016-11-25 08:35:08-- http://localhost:8080/101_ObjectCategories.tar.gz localhost (localhost) をDNSに問いあわせています... 127.0.0.1 localhost (localhost)|127.0.0.1|:8080 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 200 OK 長さ: 131740031 (126M) [application/x-tar] `101_ObjectCategories.tar.gz' に保存中 100%[======================================>] 131,740,031 28.6MB/s 時間 4.5s 2016-11-25 08:35:13 (27.8 MB/s) - `101_ObjectCategories.tar.gz' へ保存完了 [131740031/131740031]
OK。うまくいった!