- Python: 파이썬 2.6 이상을 사용한다. 안 써본 사람은 파이썬 문서화 페이지에서 튜토리얼 정도는 읽고 시작하자.
- Django: 장고는 파이썬에서 가장 유명한 웹 프레임워크. 안 써본 사람은 장고 문서화 페이지에서 튜토리얼 정도는 읽고 시작하자.
- virtualenv, virtualenvwrapper: 프로젝트 별로 파이썬 패키지를 관리할 수 있게 해주는 툴들. 밑에서 설명할꺼임.
- pip: 파이썬 패키지 인스톨러. 밑에서 설명할꺼임.
- git: 버전 컨트롤. 이 책의 첫 두 챕터를 읽으면 아쉬운 대로 쓰기 시작할 수 있다.
-
먼저 git repository 를 클론한다.
$ git clone git://github.com/jongman/algospot.git
$ cd algospot -
사이트에 필요한 각종 패키지들을 깔기 위해 easy_install 을 깔고, easy_install 로 pip 을 깐다. easy_install 이랑 pip 은 둘다 파이썬 패키지 매니저인데, pip 이 더 최신이지만 아직 우분투 리포지토리에 안 들어가 있다. easy_install 은 처음에 pip 까는 용도 빼고는 쓰지 않는다.
libjpeg-dev
는 아바타 리사이즈 할 때 python imaging library 에서 쓰기 때문에 필요하다.$ sudo apt-get install python-setuptools python-dev libjpeg-dev
$ sudo easy_install pip -
virtualenv 를 깐다. virtualenv 는 파이썬 패키지를 로컬 디렉토리에 깔 수 있게 해 주는 도구다. 시스템 전역에 깔지 않아도 되기 때문에 두 개 이상의 프로젝트의 dependency 가 충돌하거나 할 일이 없음. virtualenv 가 진리임. ㅇㅇ
$ sudo pip install virtualenv virtualenvwrapper
-
.bashrc
에 virtualenvwrapper 설정을 넣고 셋업을 적용한다.$ echo export WORKON_HOME=~/.virtualenvs >> ~/.bashrc
$ echo source /usr/local/bin/virtualenvwrapper.sh >> ~/.bashrc
$ mkdir -p ~/.virtualenvs
$ source ~/.bashrc -
virtualenv 환경을 만들고 activate 한다.
$ mkvirtualenv algospot-django --no-site-packages
-
환경을 만들면 자동으로 활성화되며, 그러면 프롬프트 앞에 환경 이름인
(algospot-django)
이 붙는다. 다른 쉘에서는 다음 커맨드를 치면 해당 virtualenv 를 사용할 수 있다.$ workon algospot-django
-
virtualenv 내에서 까는 모든 패키지는
~/.virtualenvs/algospot-django
디렉토리 내에 깔리게 되며, sudo 권한 없이도 깔 수 있다. algospot 사이트에 필요한 각종 파이썬 패키지는 requirements.txt 에 들어있다. pip 을 이용해 requirements 에 들어 있는 패키지들을 깐다. 이렇게 하면 django 랑 기타 장고 앱들을 다 깔아 준다.$ pip install -r requirements.txt
-
단, 마크업을 위해 사용하는 misaka 패키지는 커스터마이징한 것을 사용하고 있으므로 따로 설치해 주어야 한다.
$ git submodule update --init --recursive
$ cd libs/misaka
$ python setup.py install -
일단 필요한건 다 깔았다 우왕ㅋ굳ㅋ 로컬 개발을 위해서는
DEBUG
모드에서 구동하는 것이 편하다.local_settings.py.example
을 복사해 쓰자.$ cd www/algospot
$ cp local_settings.py.example local_settings.py -
디비 테이블들을 만든다.(개발 DB로 sqlite를 사용할 경우 $ sudo apt-get install sqlite3 libsqlite3-dev)
$ ./manage.py syncdb --noinput --migrate
-
everyone
그룹과 슈퍼유저를 만든다.$ ./manage.py loaddata base/fixtures/fixtures.json
$ ./manage.py createsuperuser --username=admin --email=admin@algospot.com -
디비에 초기 데이터를 집어넣는다.
$ ./manage.py loaddata wiki/fixtures/fixtures.json
$ ./manage.py loaddata forum/fixtures/fixtures.json -
이제 멋있게 개발 서버를 켠다.
$ ./manage.py runserver
-
웹브라우저에서 http://127.0.0.1:8000를 연다.
-
온라인 저지의 경우 채점을 위해
celery
의 구동을 필요로 한다. 여기서는 브로커로 쓰기 위해RabbitMQ
를 사용해 보자.$ sudo apt-get install rabbitmq-server
$ ./manage.py celery worker
프로젝트에 새 기능을 추가하거나 버그를 고치려면 다음과 같은 과정을 밟는다.
- 프로젝트 홈페이지의 오른쪽 위 Fork 버튼을 이용해서 프로젝트를 fork 한다. 그러면 algospot 프로젝트의 개인 복사본이 생긴다.
- 위 과정을 거쳐 해당 프로젝트를 클론한다.
- 로컬에서 적절히 수정한 뒤 개인 복사본 프로젝트로 클론한다.
- 개인 프로젝트 홈페이지에서 Pull Request 를 통해 jongman 에게 Pull Request 를 보낸다.
- jongman 이 해당 프로젝트를 가져와 머지한다.
- -끗-
좀더 자세한 설명은 github의 매뉴얼 페이지에서 볼 수 있다.
-
error at /accounts/register/ ([Errno 111] Connection refused)
회원가입 시, 위와 같은 에러가 난다면 개발서버에 회원가입 인증메일 발송을 위한 SMTP 서버가 없기 때문이다. 아래와 같이 로컬에 임시 SMTP 서버를 띄우고, local_setting.py에 SMTP 서버 포트를 지정한다.$ python -m smtpd -n -c DebuggingServer localhost:1025
// local_settings.py ``` settings.EMAIL_HOST = 'localhost' settings.EMAIL_PORT = 1025 ```