Django 1.3 のインストール

インストールそのものは簡単。
前に DJango をインストールした時と同様に easy_install で一発。

[paraches@localhost myTest]$ sudo easy_install Django

こんだけ。

一応、確認。

[paraches@localhost myTest]$ python
Python 2.7.1 (r271:86832, Apr 19 2011, 01:31:25) 
[GCC 4.1.2 20080704 (Red Hat 4.1.2-50)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> django.VERSION
(1, 3, 0, 'final', 0)
>>> 
[paraches@localhost myTest]$ 

ちゃんと Django 1.3 がインストールされた。

テスト用の Web サーバ云々は前に Django 1.2.3 をインストールした時と同じなので省略。

mod_wsgi で Django を使う設定

まずは Django のプロジェクトを置くフォルダの場所を決める。
今回は

/var/www/django

にした。

Django のプロジェクトは myApps にする。

[paraches@localhost www]$ sudo mkdir django
[paraches@localhost www]$ cd django
[paraches@localhost django]$ sudo django-admin.py startproject myApps
[paraches@localhost django]$ ls
myApps


次に mod_wsgi の設定のファイル myDjango.wsgi を myApps の中に作る。(この辺は Django のドキュメントに書いてある。)

[paraches@localhost django]$ cd myApps
[paraches@localhost django]$ vi myDjango.wsgi
[paraches@localhost myApps]$ cat myDjango.wsgi 
import os, sys
sys.path.append('/var/www/django')
os.environ['DJANGO_SETTINGS_MODULE'] = 'myApps.settings'

import django.core.handlers.wsgi

application = django.core.handlers.wsgi.WSGIHandler()

[paraches@localhost myApps]$ 


最後に apache の設定。
まずは /etc/httpd/conf/httpd.conf の最後に

LoadModule wsgi_module modules/mod_wsgi.so

を加える。
これで mod_wsgi が読み込まれる。


次に、Virtualhost の設定。
/etc/httpd/conf.d/virtualhost.conf を作る。

[paraches@localhost conf.d]$ sudo vi virtualhost.conf 
[paraches@localhost conf.d]$ cat virtualhost.conf 

<VirtualHost *:80>
        ServerName django.hoge.com
        WSGIScriptAlias /django /var/www/django/myApps/myDjango.wsgi
        <Directory /var/www/django/myApps>
                Order allow,deny
                Allow from all
        </Directory>
</VirtualHost>

[paraches@localhost conf.d]$ 

これで、サーバの /django にアクセスすると /var/www/django/myApps/myDjango.wsgi が呼ばれる。


で、設定ができたら apache に設定を読み込ませる。

[paraches@localhost conf.d]$ sudo /etc/init.d/httpd reload
httpd を再読み込み中:                                      [  OK  ]
[paraches@localhost conf.d]$ 

これで http://localhost/django にアクセスすれば、取り敢えずは以下の画面まで行ける!

Django 1.3 の設定を少し

後は Django の設定の話。
Django のドキュメントにチュートリアルがあるのだけど、Django 1.3 だと settings.py の中身がちょっと違ってたりするのでメモ。

まずは settings.py のデータベースの設定。

[paraches@localhost myApps]$ cat settings.py
<省略>
import os

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': os.path.realpath(os.path.dirname(__file__)) + os.sep + 'db.sqlite3',                      # Or path to database file if using sqlite3.
        'USER': '',                      # Not used with sqlite3.
        'PASSWORD': '',                  # Not used with sqlite3.
        'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
    }
}
<省略>

データベースは sqlite3 が「ENGINE」と「NAME」を設定するだけで良いので簡単。
データベースのファイル db.sqlite3 は、プロジェクトの myApps フォルダに作る設定にした。


で、suncdb すると…

[paraches@localhost myApps]$ python manage.py syncdb
Traceback (most recent call last):
<省略>
sqlite3.OperationalError: unable to open database file

はい、エラー。

今回の場合、myApps に(たぶん apache さん)が書き込めないとダメ。今は 755 なので 757 にして再度トライ。

[paraches@localhost myApps]$ sudo chmod 757 .
[paraches@localhost myApps]$ python manage.py syncdb
Creating tables ...
Creating table auth_permission
Creating table auth_group_permissions
Creating table auth_group
Creating table auth_user_user_permissions
Creating table auth_user_groups
Creating table auth_user
Creating table auth_message
Creating table django_content_type
Creating table django_session
Creating table django_site

You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): yes
Username (Leave blank to use 'paraches'): 
E-mail address: hoge@hoge.com
Password: 
Password (again): 
Superuser created successfully.
Installing custom SQL ...
Installing indexes ...
No fixtures found.
[paraches@localhost myApps]$ 

完了。


で、チュートリアルに従って polls アプリを作ってみる。

[paraches@localhost myApps]$ python manage.py startapp polls
[paraches@localhost myApps]$ ls
__init__.py   db.sqlite3  myDjango.wsgi  settings.py   urls.py
__init__.pyc  manage.py   polls          settings.pyc  urls.pyc
[paraches@localhost myApps]$ 

ちゃんとできてる。


次に admin 関係のメモ。
チュートリアルを進めて、settings.py のアプリケーションの部分と url.py の admin を有効にする。

[paraches@localhost myApps]$ cat settings.py
<省略>
INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # Uncomment the next line to enable the admin:
    'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
        'myApps.polls'
)
<省略>
[paraches@localhost myApps]$ cat urls.py
from django.conf.urls.defaults import patterns, include, url

# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'myApps.views.home', name='home'),
    # url(r'^myApps/', include('myApps.foo.urls')),

    # Uncomment the admin/doc line below to enable admin documentation:
    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),

    # Uncomment the next line to enable the admin:
    url(r'^admin/', include(admin.site.urls)),
)
[paraches@localhost myApps]$ 

そしてブラウザでアクセス!

はい、エラー。
db.sqlite3 が 644 なのでまた apache さんが書き込めない。db.sqlite3 を apache さんの物にしちゃえば良い。
あと、db.sqlite3 が apache の物になったら、myApps は誰でも書ける状態じゃなくても良いので元に戻しておく。

[paraches@localhost myApps]$ sudo chown apache:apache db.sqlite3 
[paraches@localhost myApps]$ cd ..
[paraches@localhost django]$ sudo chmod 755 myApps/

今度こそ!

はい、アクセスできたけど、css が読み込めてない。
admin の media フォルダへのパスを通さなきゃダメ。


前の Django 1.2.3 の時は settings.py での設定が

ADMIN_MEDIA_PREFIX = '/media/'

となっていたので

[paraches@centos html]$ sudo ln -s /usr/local/lib/python2.6/site-packages/Django-1.2.3-py2.6.egg/django/contrib/admin/media/ media

でいけたけど、Django 1.3 は static とか出てきてちょっと違う。
settings.py での設定が

ADMIN_MEDIA_PREFIX = '/static/admin/'

となっているので、/var/www/html/ に static フォルダを作って、そこからリンクを張る。

[paraches@localhost html]$ sudo mkdir static
[paraches@localhost html]$ cd static/
[paraches@localhost static]$ sudo ln -s /usr/local/lib/python2.7/site-packages/django/contrib/admin/media/ admin

これでちゃんと css が読み込めて綺麗に表示される。


取り敢えず以上で設定はできたかな。
パーミション関係で出てくるエラーが面倒だけど、なんとかこの状態で動いてる。
後は自分のアプリケーションを作って動かすだけだけど、テンプレートの位置や static だの media の位置がまた面倒な気がする。
その辺りはまた時間があったら…