環境
- Mac (Catarina)
- pyenv使用(今回はPython 3.6.2を使っています)
- anaconda3(mkdirで作成)の中にプロジェクトのmySiteとアプリのmyappを作成済みです
しまりす 太郎さんの
Macでdjangoとapacheを連携させたい人生だった
を参考にさせていただきました!
ただ解決できなかった所があるので、同じような境遇にいる人の助けになればと思い投稿しています!
初投稿ですが、分かりやすく伝えられるよう努めます。笑
#今回のあらすじ
-
Python設定
-
mod_wsgi周りのインストール
-
apache設定
#Python設定
今回自分が使ったPythonのバージョンは3.6.2です。
ここはどのバージョンでも良いと思います。
ただ、
CONFIGURE_OPTS="--enable-shared" pyenv install 3.6.2
のようにoptionをつけてインストールしたものである必要があります。
とゆうのも、
/Users/username/.pyenv/versions/3.6.2/lib/libpython3.6m.dylib
というファイルが無ければ、後々出てくるmod_wsgi.soがpythonを参照することができずエラーを吐かれてしまうからです。
ここがクリアできておらずDjangoのプロジェクトを作っている人は、上記の方法でPythonをインストールし、もう一度プロジェクトを作成してください。。
#mod_wsgi周りのインストール
pip install mod-wsgi-httpd
pip install mod_wsgi
でmod_wsgi周りのインストールをしてください!
こやつがapacheとDjangoを繋ぐ役割を担っています。
apache設定
Macにはデフォルトでapacheが入っていますが、それを使うとダメっぽいので最新版をインストールします。
Apache httpd を macOS に Homebrew でインストールする手順
がとても分かりやすかったです!
次に、
/usr/local/etc/httpd/httpd.conf
にコードを追加していきます。ここが最も重要です!
しまりす 太郎さんも仰られていますが、
でのhttpd.confに以下のような追記をすれば良いとゆうのは間違いです。
LoadModule /Users/username/.pyenv/versions/anaconda3-4.3.0/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-darwin.so
WSGIScriptAlias / /Users/username/anaconda3/mySite/mySite/wsgi.py
WSGIPythonPath /Users/username/anaconda3/mySite
WSGIPythonPath /Users/username/.pyenv/versions/anaconda3-4.3.0/lib/python3.6/site-packages
<Directory /Users/username/anaconda3/mySite/mySite>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>
私がここで引っ掛かった所が3つあります。
1つ目は、1行目の引数が足りない事件です。正しくは、
LoadModule wsgi_module /Users/username/.pyenv/versions/3.6.2/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-darwin.so
のようにwsgi_moduleという引数がなければいけません。
2つ目は、5行目いらない事件です。以下のようにコメントアウトするか、消しましょう。
#WSGIPythonPath /Users/username/.pyenv/versions/3.6.2/lib/python3.6/site-packages
ここはしまりす 太郎さんの方では指摘されていなかった部分です!
自分の環境下だけ必要だったのかなー。
ちなみに、ここをコメントアウトしていないとlocalhostアクセス時に
500 Internal Server Error
とゆうエラーが吐かれました。
3つ目は、9,10行目が古い事件です。以下のように修正しましょう!
<Directory /Users/username/anaconda3/mySite/mySite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
ここもしまりす 太郎さんの方では指摘されていなかった部分です!仕様が変わってますね〜
ちなみに、修正せずにいるとlocalhostアクセス時に
403 Forbidden
とゆうエラーが吐かれました。
ここは特定のIPアドレスからのアクセスだけを許可したりできるので、適宜調整してください!
ここでやっと、
sudo brew services restart httpd
を叩くと無事Djangoのチュートリアルページが表示されるはずです!
restartになっているのは修正したhttpd.confを読み込み、反映するためですね。
#終わりに
ここまで読んでいただきありがとうございました!
この記事では取り上げていませんが、プロジェクトのsettings.pyのALLOWED_HOSTSを設定していないなどでアクセスできないという問題だったり、他にも色々躓いたりしました。やはり大変ですね〜
ですが自分なりに試行錯誤して解決できたときはやはり最高です。笑
もし不備があれば、ご指摘のほどよろしくお願いします!