Django2 CGI handler + apache2.4
カテゴリー: レンタルサーバーやcgi
2018-06-13
Django2 CGI handler + apache2.4 : メモ
概要
python3.6 + django 2.0.6
基本的に wsgi_over_cgi.py 内の
PATH_INFO、FORCE_SCRIPT_NAMEの変更設定がwsgi_emulate.py または wsgi_over_cgi.py および setting.py内に追加されています。
IfModuleで条件指定しているため
wsgiモジュールが有効になった場合は自動的にwsgiで動作する
必要な設定
.htaccess
apacheが古くて、環境変数が渡らない場合は
start-django.cgi に以下を追加する
表示されない場合
# https://pypi.python.org/pypi/pytz#downloads
執筆:2018.06.13
編集:2018.06.13
編集:2018.06.13
概要
python3.6 + django 2.0.6
- .htaccess に cgi用のエントリを追記する
- start-django.cgi を設置する(名称はなんでもいい)
wsgi_emulate.py または wsgi_over_cgi.pyをimportする - wsgi_emulate.py または wsgi_over_cgi.py を settings.py と同じフォルダに設置する
基本的に wsgi_over_cgi.py 内の
from wsgiref.handlers import CGIHandler
from . import wsgi
app = wsgi.get_wsgi_application()
CGIHandler().run(app)
だけで動かないといけないのですが、django内の処理が間違っているために、環境変数名の変更 及びfrom . import wsgi
app = wsgi.get_wsgi_application()
CGIHandler().run(app)
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>
<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/
こちらに書き込んでいたほうが確実だろう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://pypi.python.org/pypi/pytz#downloads