日記帳
本ページはプロモーションが含まれています
カテゴリー
Links
blog(ブログ)マスター
アンドロイドの巣
ゼロから始めるベランダ菜園
タイトル
ラジコン
2024年5月
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

Django2 CGI handler + apache2.4

2018-06-13
Django2 CGI handler + apache2.4 : メモ

執筆:2018.06.13
編集:2018.06.13


概要
python3.6 + django 2.0.6
  1. .htaccess に cgi用のエントリを追記する
  2. start-django.cgi を設置する(名称はなんでもいい)
    wsgi_emulate.py または wsgi_over_cgi.pyをimportする
  3. wsgi_emulate.py または wsgi_over_cgi.py を settings.py と同じフォルダに設置する
以上をすませて、アクセスすると CGIモードで動作する

基本的に wsgi_over_cgi.py 内の
from wsgiref.handlers import CGIHandler
from . import wsgi
app = wsgi.get_wsgi_application()
CGIHandler().run(app)
だけで動かないといけないのですが、django内の処理が間違っているために、環境変数名の変更 及び
PATH_INFO、FORCE_SCRIPT_NAMEの変更設定がwsgi_emulate.py または wsgi_over_cgi.py および setting.py内に追加されています。


IfModuleで条件指定しているため
wsgiモジュールが有効になった場合は自動的にwsgiで動作する

必要な設定
.htaccess

# 追加分
<IfModule !mod_wsgi.c>
<FilesMatch "\.(?i:pyc?)$">
order deny,allow
deny from all
# RewriteRule "" - [L,R=404]
</FilesMatch>

# wsgi_emulate.py 内で この値をもとに正しいURLを生成できるように成形される
setenv BASE_URI    /    # / or /pathtositetop
setenv SCRIPT_URL /    # / or /pathtositetop/

RewriteRule "^$" start-django.cgi [L,T=application/x-httpd-cgi]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule "." start-django.cgi [L,T=application/x-httpd-cgi]
</IfModule>

apacheが古くて、環境変数が渡らない場合は
start-django.cgi に以下を追加する
os.environ.setdefault("BASE_URI", "/") # / or /pathtositetop
os.environ.setdefault("SCRIPT_URL", "/") # / or /pathtositetop/
こちらに書き込んでいたほうが確実だろう

表示されない場合
  • start-django.cgi ファイルの実行権限がついているか確認する
  • djangoへのパスが通っているか?
    • インストールする場合
      pip3 install Django
    • 指定フォルダから読み込む場合
      スクリプト内で
      sys.path.append("パス")
  • pytzの確認
    pip3 install pytz
  • No module named '_sqlite3'
    sudo pkg install databases/py35-sqlite3
# https://www.djangoproject.com/download/
# https://pypi.python.org/pypi/pytz#downloads


ブログ内 関連記事: Django2 CGI handler


ブログ内 関連記事: Django2 CGI handler

トラックバック
トラックバックはありません。
PR

[PR]