2018年5月24日木曜日
ウズマスター戦記
ウズマスター戦記 https://www.uzumax.org/2018/05/django-managepy-runserver.html

Django起動 manage.py runserverの全て

プロジェクトを作成したところで、いよいよDjangoを起動します。
Djangoを起動するコマンド「python manage.py runserver」は、簡単ですが最も頻繁に使うコマンドなので、気合い入れて詳細まで覚えていきましょう。

起動コマンド

とにかく一回起動して疎通確認しましょう。
コマンドプロンプトから以下を入力して下さい。

>python manage.py runserver

http://localhost:8000/」にアクセスし、以下のような画面が見えればOKです。



オプション確認

HELPコマンドを使用することで、runserverに付属しているオプションを確認出来ます。

HELPコマンド

>python manage.py --help runserver

実行結果

usage: manage.py runserver [-h] [--version] [-v {0,1,2,3}]
                           [--settings SETTINGS] [--pythonpath PYTHONPATH]
                           [--traceback] [--no-color] [--ipv6] [--nothreading]
                           [--noreload] [--nostatic] [--insecure]
                           [addrport]

Starts a lightweight Web server for development and also serves static files.

positional arguments:
  addrport              Optional port number, or ipaddr:port

optional arguments:
  -h, --help            show this help message and exit
  --version             show program's version number and exit
  -v {0,1,2,3}, --verbosity {0,1,2,3}
                        Verbosity level; 0=minimal output, 1=normal output,
                        2=verbose output, 3=very verbose output
  --settings SETTINGS   The Python path to a settings module, e.g.
                        "myproject.settings.main". If this isn't provided, the
                        DJANGO_SETTINGS_MODULE environment variable will be
                        used.
  --pythonpath PYTHONPATH
                        A directory to add to the Python path, e.g.
                        "/home/djangoprojects/myproject".
  --traceback           Raise on CommandError exceptions
  --no-color            Don't colorize the command output.
  --ipv6, -6            Tells Django to use an IPv6 address.
  --nothreading         Tells Django to NOT use threading.
  --noreload            Tells Django to NOT use the auto-reloader.
  --nostatic            Tells Django to NOT automatically serve static files
                        at STATIC_URL.
  --insecure            Allows serving static files even if DEBUG is False.

オプション概要

ここから上のHELPコマンドで出てきた各種オプションを個別にチェックしていきますが、パッと要約だけ知りたい人は下記表をご確認下さい。

パラメータ名 概要
-h, --help 上記に表示されているとおり、オプションの確認
--version Djangoのバージョンを表示
-v {0,1,2,3}, --verbosity {0,1,2,3} ログ出力における設定で、数値が大きいほど詳細に出力する。
--settings SETTINGS 設定ファイルの任意指定
--pythonpath PYTHONPATH 実行するPYTHONのパスを任意指定
--traceback エラーでコケた時にトレースログを出力する。
--no-color コンソールに色を付けない
--ipv6, -6 IPv6モード
--nothreading リクエストハンドリングにスレッドを使用しない
--noreload ホットリロード封印
--nostatic DEBUG = Trueの場合、通常は公開されているstaticファイルの公開を停止する
--insecure DEBUG = Falseの場合、通常は公開されていないstaticファイルの公開を許可する

HELPは上に記載のとおりなので、それ以下の詳細をチェックしていきます。

オプション詳細

--version

Djangoのバージョンを表示します。

>python manage.py version runserver
2.0.5

-v {0,1,2,3}, --verbosity {0,1,2,3}

ログ出力のレベルを設定します。

  • 0:最小
  • 1:ノーマル(デフォルト)
  • 2:詳細
  • 3:非常に詳細

しかし、すいません。
このオプションを入れてもDjangoのログ出力に影響が見つかりませんでした。
runserverコマンドにおいては機能していないオプションであるように見えるのですが……。
何か分かったら追記します。

--settings SETTINGS

Djangoを起動するとデフォルトでは「heibon_django.settings」を読み込むようになっていますが、このオプションを指定すると違うファイルを指定出来ます。

また、manage.pyに以下のような記述があるので、毎回オプションを指定するのが面倒ならここを直に書き換えちゃっても良いですね。

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "heibon_django.settings")

--pythonpath PYTHONPATH

Pythonのパスは普通はインストールマシンの環境変数に入っていると思いますが、任意で替えたい場合にこのオプションを使用します。

--traceback

エラーでコケた時にトレースログを出力してくれるオプションですが、私の環境だと指定しなくても常にトレースログが出ているように見えます。

どういう時に影響が出るのか、分かったら追記します。

--no-color

コンソール表示に色を付けなくなるオプションとのことですが、私は指定しなくても色が付いている所を見たことがありません。

どういう時に影響が出るのか、分かったら追記します。

--ipv6, -6

通常はIPv4で起動しますが、IPv6で起動させるためのオプションです。

--nothreading

ん~。これは調査不足の面もあるのですが……。
普通、Webシステムというのはマルチスレッドで動くもので、アクセスが2つ同時に来たら2スレッドが立ち上がり、同時に処理出来るようになっています。

--nothreadingはスレッドを使用しないという意味ですから、恐らくDjangoのマルチスレッド機能を封印して、常にシングルで挙動するというものではないかと思っています。

このため、アクセスが2つ来たら1つだけ処理してもう一つは待ちが発生するはずです。

--noreload

Djangoはインスタンスを起動しっぱなしでソースを修正することが可能で、修正すると自動で新しいソースを再読込します。
この挙動を「ホットリロード」と呼びますが、このオプションはその挙動を停止するものです。

ホットリロードが入っているとマシンが重く感じることも多いので、手動で再起動した方が快適な場合はこれを使うと良いでしょう。

--nostaticと--insecure

基本的に開発環境(=自分のパソコン)で開発する時は、cssやjs、画像ファイルなどのstaticファイル(静的ファイル)はプロジェクトの中に設置して読み込みます。

しかし、それだと一つのサーバ(アプリケーションサーバ)に負荷が集中することになるので、本番環境では静的ファイルだけは別のWebサーバに設置し、そこから読み込んで貰うというのが王道的なインフラ設計です。

--nostaticと--insecureはその逆で、開発環境なのに外部サーバを覗きに行ったり、本番環境なのに内部ファイルを公開したりするためのオプションです。

終わりに

以上でオプションは全部ですが、この目で動作を確認出来なかったオプションがいくつかあるのが残念なところ。
判明次第、更新します。

バックナンバー


0 件のコメント:

コメントを投稿

お気軽にコメント下さい。