Django + apache + mod_python

(반말입니다 죄송.. -_-; )

..장장 4일이 걸렷다.. -_-;

하루는 밤새기까지 했는데 안되서 정말 고생한듯..

사실은 wsgi로 하고 싶었는데.. 이게 잘못된건지 패스 설정이 잘못된건지 모르겠지만

다시 깔 의도는 없어서 mod_python 으로 했다.

아마 다음번엔 wsgi설정으로 하지 않을까 한다.

우선 리눅스 버전은 ubuntu 10.04 LT 버전이고

http://bryanhelmig.com/setting-up-ubuntu-10-04-with-apache-memcached-ufw-mysql-and-django-1-2-on-linode/

http://shared.tistory.com/archive/20100112

이 두싸이트에서 영감을 받았다.. -_-;

진짜 고생 많이 했다. 사실 뭐가 뭔지도 모르고 덥석 달려든참이라.. -_-;

처음부터 적어본다.

우선

apt-get update && apt-get upgrade

를 해서 업데이트를 모두 마친후에
apt-get install build-essentials
apt-get install apache2 apache2.2-common apache2-mpm-worker apache2-threaded-dev libapache2-mod-wsgi python-dev
apt-get install mysql-server python-mysqldb

를 설치하였는데 여기서 문제가 되는게 바로 mpm-worker이다. 내가 WSGI 버전과 mod_python 을 동시에 보면서 일어난 문제일지도 모르겠는데 mod_python에서는 mpm-worker가 사용되지 않고 mpm-prefork가 사용된다.

apt-get install apache2-mpm-prefork

를 다시 깔게 되면 이전에 깔아놨던 mpm-worker가 지워지지만 기왕이면 저 위에서 저걸 빼고 까는게 빠르겠지-_-;

그 후엔

apt-get install python-django 이렇게 하는 방법도 있겠다만은...

최신버전을 설치하기위해서

wget -O django12.tar.gz http://www.djangoproject.com/download/1.2/tarball/ && tar -zxvf django12.tar.gz

cd Django-1.2 && python setup.py install

이렇게 디장고 인스톨을 마쳤다.

나는

S**Sto** 폴더위에 Se*_**** 이라는 프로젝트를 만들었고 아파치는 /var/www가 기본설정이었다.

최종설정값 urls.py
(r'S**Sto**/Se*_****/admin/', include(admin.site.urls)),

최종 sites-available 안의 default (흔히 말하는 httpd설정)

# Code by Ian #
        <Location "/S**Sto**/">
                SetHandler python-program
                PythonHandler django.core.handlers.modpython
                SetEnv DJANGO_SETTINGS_MODULE settings
                PythonDebug On
                PythonPath "['/S**Sto**/Se*_****', '/Se*_****/'] + sys.path"
        </Location>

        <Directory "/usr/local/lib/python2.6/dist-packages/django/contrib/admin/media/">
            AllowOverride None
            Options None
            Order allow,deny
            Allow from all
        </Directory>

        Alias /media/ "/usr/local/lib/python2.6/dist-packages/django/contrib/admin/media/"

은 다음과 같이 끝냈다.


이게 끝이었는데.. 이거 설정이 이렇게 어려웠다.. -_-;

하아 내 사일 ㅠㅠ

Django 와 Python


python은 __name__과 같은 특이한 형식을 갖는 내장이름이 있다.
__name__은 module의 이름을 가진 변수이다.

import! os
print os.__name__

위의 문장을 수행하면 'os'가 출력된다.
특이한 경우가 있는데, python을 인터프리터 방식이 아닌 스크립트로 수행하면 __name__이 최상위 module에서는 자신의 module 이름이 아닌 '__main__'을 가지게 된다.

내용이 print __name__인 test.py라는 파일이 있다고 하면

1. 인터프리터
>>> import! test
'test'가 출력된다

2. 스크립트로 출력
python test.py
'__main__'가 출력된다.

위와 같은 특성을 가진 __name__은 module개발 할 때 이용하면 좋다. Module은 대부분 다른 module이 import!하여 사용되는데 개발시에는 수행되는 테스트 코드를 작성할 때 __name__을 이용하게 된다.

def some_function() :
  pass

def test() :
  some_function()

if __name__ == '__main__' :
  test()

위와 같은 형식으로 개발하게 되면 다른 module에 import!될 때에는 test()가 수행되지 않게 된다.

Django, 설정법


ubuntu에서 django 설치


-- Mod_wsgi 가 아닌 그냥 바로 붙여버리는 방법 --

웹 어플리케이션을 작성하기 위한 대표적인 framework 은 ruby on rails 다. 하지만 내가 잘 모르는 ruby 를 사용하려니 왠지 막막하고, 더구나, 웹서버와 ruby의 연동을 위한 웹서버 설정은 나를 더 갑갑하게 했다. 내게 친숙한 python 으로 어케 좀 해 볼수 없을까 해서 django 를 알아보니 우부툰에 마침 패키징 되어 있어서 쉽게 설정을 마쳤다. 개인 프로젝트에 굳이 framework 을 사용할 필요가 있을까 했지만, 공부하는 셈 치고 이왕이면 처음부터 체계적으로 작성해 나가는게 나을 것 같았다. django 메인 페이지에 적혀 있는 DRY(Don't Repeat Yourself) 처럼, 폼 만들고, 예외처리 스크립트 넣고 하는 반복 작업을 하느니 차라리 그 시간에 다른 공부를 하는게 낫다 생각했다. 물론 이 framework 을 공부하는 시간 또한 못잖겠지만, 한번 알아두면 좋지 않은가.

여기서는 django를 우분투(Hardy) 상에서 apache2, mod_python 으로 설치 하는 것에 대해 간략한 설명을 한다.

$ sudo apt-get install apache2-mpm-prefork
$ sudo apt-get install libapache2-mod-python
$ sudo apt-get install python-django

주의할 것은 apache2 패키지를 설치할때 기본적으로 설치 되는 패키지는 apache2-mpm-worker  이다. mod_python 과 사용하기 위해서는 apache2-mpm-prefork 패키지를 설치해야 한다(아래 reference 1 참고). libapache2-mod-python 패키지를 설치할때 의존성에 의해 apache2-mpm-worker 패키지를 지우고 apache2-mpm-prefork 패키지로 재 설치 되긴 하지만, 혹시 몰라서 적는다

이렇게 하면 django 패키지가 설치 됐다. 제대로 설치 되었는지 궁금할텐데, 프로젝트 디렉토리 설정을 해서 확인을 해보자.

우분투의 apache2 디렉토리 구성은 이렇다.

/etc/apache2 아래에 설정이 들어 있다.
/var/www 여기는 웹서버의 루트 디렉토리이다.

/var/www/yogy 디렉토리를 프로젝트 디렉토리로 해서 http://localhost/yogy 를 호출해 보도록 하겠다.

<Location "/yogy/">
    SetHandler python-program
    PythonHandler django.core.handlers.modpython
    SetEnv DJANGO_SETTINGS_MODULE yogy.settings
    PythonPath "['/var/www'] + sys.path"
    PythonDebug On
</Location>

이 내용을 /etc/apache2/httpd.conf 안에 넣는다.

Location "/yogy/"
SetEnv DJANGO_SETTINGS_MODULE yogy.settings
PythonPath "['/var/www'] + sys.path"

이 세 줄이 중요하다.
Location 은 프로젝트의 URI를 지정하는 것이고 디렉토리를 지칭하는 것이 아니다. 따라서 파일 시스템상의 위치는 /var/www/yogy 가 되겠다.
다음으로 yogy.settings 는 yogy 프로젝트에서 settings.py 파일을 설정 정의 파일로 사용한다는 것이다.
마지막은 python 경로 지정을 해준다. 기본 시스템 경로에 웹서버의 루트의 경로를 추가해서 웹서버 루트 디렉토리에 아래에 있는 우리의 파이썬 프로젝트 모듈들을 로드 할 수 있게 한다.

django 공식 홈의 How To use Django with mod_python 문서에는 여기까지만 나와 있어서 처음엔 저 yogy.settings 를 어떻게 하라는건지 막막했다. 직접 yogy 디렉토리에 settings.py 빈 파일도 만들어 보고 했는데 에러 메시지만 출력하고 동작하지 않는다. 약간의 삽질을 하다 보니 관리 프로그램이 있었다. (아래 reference 2 참고)

$ whereis django-admin
django-admin: /usr/bin/django-admin


해 보면 /usr/bin/django-admin 이 있음을 알 수 있을 것이다.

그냥 실행해 보면 여러가지 옵션이 나오는데 그 중에 startproject 가 있다.

$ cd /var/www
$ django-admin startproject yogy


이렇게 실행하면 yogy 디렉토리를 만들고 그 안에 몇가지 스켈레톤 파일들을 복사해 준다. 거기에 settings.py 도 발견 할 수 있을 것이다.

이제 브라우저에서 http://localhost/yogy 를 열어보자.
It worked! 가 출력되는 페이지를 볼 수 있을 것이다.

이제  django 로 멋진 사이트를 만들기만 하면 된다!!!

이 외 각 언어별 추천할 만한 framework 을 적어둔다
Spring http://www.springframework.org/   java
Ruby on Rails http://www.rubyonrails.org/ ruby
TurboGears http://www.turbogears.org/ python
Cake http://www.cakephp.org/ php


reference :
1. http://www.djangoproject.com/documentation/0.96/modpython/ mod_python 설정에 관한 페이지다.
우분투에 패키징 되어 있는 django 는 0.96 버전이다. 최신 버전을 사용한다면 http://www.djangoproject.com/documentation/modpython/ 를 참고한다.
2. http://www.djangoproject.com/documentation/install/ 여기에는 django-admin 프로그램에 관한 내용이 언급이 되어 있다. 우분투를 사용한다면 apt-get 만으로 충분하지만, 설치 관련 내용이 궁금하다면 이 페이지를 참고 한다.


/////http://iam312.pe.kr/trackback/264 여기서 퍼왔음을 명시합니다 ㅠㅠ ////////

prev 1 2 3 4 5 6 ··· 10 next