Djangoでアプリケーション開発をする場合、Django付属の開発サーバー(manage.py)を使用していたが、どうもリロードが遅かったり、Linux用にデプロイするのが、めんどくさそうと思ったので、開発時からApacheを使ってホストできないか調べてみた。ちなみにリロードが遅いのは、pythonコードを読み込みなおしているから、という記述をどこかで見かけた。Apacheを使うと、リロードが必要になる。MaxRequestsPerChild 1を指定すればよいが、これだと、毎回リロードすることになり、Apacheを開発サーバーとして使う意味がなくなる。変更ファイルを検出して、自動でリスタートしてくれればいいけど、Windowsだとやり方が分からないので、とりあえず、Apacheは再起動することにする。

基本方針

  • css、jsファイルなどのリソースファイルはリソース用Apacheのドキュメントルートに配置し、Django用Apacheではホストしない
  • pythonコードはドキュメントルート外に配置する
  • 開発に使用しているノートPCはネットにつなげない環境にいることも多いため、eclipseのワークスペースをそのまま配置できるようにしたい

方法

Apacheの設定ファイル

AllowとかOverrideとか、よく分かってないので、とりあえず動いた設定ファイル。Linuxで動かすときにはちゃんと調べとかないといけない。

conf/extra/httpd-django.conf
LoadModule wsgi_module modules/mod_wsgi.so
WSGIPythonHome "C:/Program Files/Python/2.6.4"
# for django project
#
# Be sure to only have this line once in your configuration
NameVirtualHost 127.0.0.1:80
# This is the configuration for your project
Listen 80
# global resource files
<Location "/media">
SetHandler None
</Location>
<Location "/res">
SetHandler None
</Location>
# exception rule for resource files
<LocationMatch "\.(png|gif|jpg|mov|mp3|avi|wav)$">
SetHandler None
</LocationMatch>
#
# static resources host(Web server)
#
<VirtualHost 127.0.0.1:80>
#
# virtual host settings
#
ServerName dev.static.com
KeepAlive On
MaxKeepAliveRequests 20
KeepAliveTimeout 1
#
# project resources
#
DocumentRoot "C:/webapp/django/project"
Alias /res/css "C:/webapp/django/project/res/css"
Alias /res/js "C:/webapp/django/project/res/js"
Alias /media "C:/webapp/django/project/media"
<Directory "C:/webapp/django/project">
AllowOverride None
Order allow,deny
Allow from all
</Directory>
#
# application resources
#
Alias /app/res/css "C:/webapp/django/project/app/res/css"
Alias /app/res/js "C:/webapp/django/project/app/res/js"
<Directory "C:/webapp/django/project/app">
AllowOverride None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
#
# project(AP server)
#
<VirtualHost 127.0.0.1:80>
#
# virtual host settings
#
ServerName dev.project.com
KeepAlive Off
#
# WSGI settings for this project
#
WSGIScriptAlias / C:/webapp/django/project/project.wsgi
#
# application code
#
DocumentRoot "C:/webapp/django/project"
<Directory "C:/Users/username/dev/src/project/">
SetHandler wsgi-script
AddHandler cgi-script .py
AllowOverride None
Order deny,allow
Allow from All
</Directory>
</VirtualHost>

httpd.confからextra/httpd-django.confを読み込むようにする。

conf/httpd.conf
Include conf/extra/httpd-django.conf

WindowsのhostsファイルにローカルホストのIPアドレスを追加する。これで、VirtualHostに設定したServerNameでアクセスできるようになる。

C:\Windows\System32\drivers\etc\hosts
127.0.0.1 dev.static.com
127.0.0.1 dev.workers.com

参考