[컴] Google App Engine 에서 Django 사용하기




Google App Enigne for Python

Google app engine(이하 GAE) 에 올려놓은 server 한동안 신경안썼는데, 다시 수정하려고 하니 많이 바뀌었다. 그래서 최신의 GAE 를 다시 사용하면서 정리를 해본다.




GAE SDK 설치

먼저 SDK 를 설치하자. 여기서는 server 로 python django 를 사용할 것이기 때문에 아래경로에서 SDK for python 을 다운로드 해서 설치를 하면 된다. 조금 오래 걸리니 여유롭게 기다리자.


python 2.7

Python 2.7 버전을 설치해야 한다. 3.x 버전을 사용할 수 있지만,  flexible environment에서만 가능하다. 그리고 이 flexible environment 는 유료다.

python 2.7 은 아래에서 download 해서 설치하면 된다.



Django 사용

아래에서 Django-skeleton 을 download 해서 django project 를 시작할 수 있다. 하지만 여기서는 Cloud DataStore 를 사용할 것이기 때문에, djangae 를 이용할 것이다. 자세한 사항은 아래 Djangae 부분을 확인하자.

Cloud DataStore

여기서 DB 는 사용하지만, NoSQL 의 Cloud DataStore 를 사용한다. 이유는 무료라서.
Django 에서 NoSQL 을 쓰기 위해 예전에는 django-nonrel 을 사용했는데, 이녀석이 빠르게 업데이트되지 않고해서, 요새 djangae 가 새롭게 떠오른다고 한다.
그래서 우리도 Djangae 를 사용해서 project 를 만들것이다.



Djangae 로 시작하기

대부분 아래 글에서 내용을 확인할 수 있다. 여기서는 좀 더 간략하게 설명한다.
djangae 로 project 를 시작하기 위해서 아래 skeleton 을 받자.
이제 아래 순서로 작업하면 된다. 여기서 project 이름을 muchart 로 한다.
  1. pip install django
  2. django-admin.py startproject --template https://github.com/potatolondon/djangae-scaffold/zipball/master --extension py,yaml,md muchart
  3. cd muchart
  4. python install_deps
  5. python manage.py check --deploy --settings=muchart.settings_live
  6. python manage.py runserver



Windows 에서 msvcrt, _ctypes 

windows 에서 바로 실행하고 나서 , url 에 request 를 하면, msvcrt module 이 없다고 나온다.

이는 Django 1.7 부터 windows 에서 import msvcrt 를 시도하는데, GAE 에서 이녀석을 load 하지 않아서 이다.(참고)

그래서 msvcrt 를 google
  • google_appengine/google/appengine/tools/devappserver2/python/sandbox.py
_WHITE_LIST_C_MODULES 에 넣어주면 된다.

_WHITE_LIST_C_MODULES = [
    'array',
    '_ast',
    'binascii',
    '_bisect',
    '_bytesio',
    'bz2',
    'cmath',
    '_codecs',
    ...

    '_ctypes', # for windows
    'msvcrt',

    ...



ERROR    2016-09-14 09:47:43,217 wsgi.py:263] 
Traceback (most recent call last):
  File "d:\mine\programming\gae\muchart_djangae\muchart\sitepackages\dev\google_appengine\google\appengine\runtime\wsgi.py", line 240, in Handle
    handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
    from django.core.handlers.wsgi import WSGIHandler
  File "d:\mine\programming\gae\muchart_djangae\muchart\sitepackages\prod\django\core\handlers\wsgi.py", line 10, in <module>
    from django import http
  File "d:\mine\programming\gae\muchart_djangae\muchart\sitepackages\prod\django\http\__init__.py", line 5, in <module>
    from django.http.response import (
  File "d:\mine\programming\gae\muchart_djangae\muchart\sitepackages\prod\django\http\response.py", line 13, in <module>
    from django.core.serializers.json import DjangoJSONEncoder
  File "d:\mine\programming\gae\muchart_djangae\muchart\sitepackages\prod\django\core\serializers\__init__.py", line 23, in <module>
    from django.core.serializers.base import SerializerDoesNotExist
  File "d:\mine\programming\gae\muchart_djangae\muchart\sitepackages\prod\django\core\serializers\base.py", line 4, in <module>
    from django.db import models
  File "d:\mine\programming\gae\muchart_djangae\muchart\sitepackages\prod\django\db\models\__init__.py", line 13, in <module>
    from django.db.models.fields.files import FileField, ImageField  # NOQA
  File "d:\mine\programming\gae\muchart_djangae\muchart\sitepackages\prod\django\db\models\fields\files.py", line 9, in <module>
    from django.core.files.storage import default_storage
  File "d:\mine\programming\gae\muchart_djangae\muchart\sitepackages\prod\django\core\files\storage.py", line 8, in <module>
    from django.core.files import File, locks
  File "d:\mine\programming\gae\muchart_djangae\muchart\sitepackages\prod\django\core\files\locks.py", line 30, in <module>
    import msvcrt
  File "d:\mine\programming\gae\muchart_djangae\muchart\sitepackages\dev\google_appengine\google\appengine\tools\devappserver2\python\sandbox.py", line 969, in load_module
    raise ImportError('No module named %s' % fullname)
ImportError: No module named msvcrt


Deploy

app.yaml

 "google app engine project 생성" 을 해서 만든 project 의 id 를 app.yaml 에 적자.

application: myproject-id
version: 1
runtime: python27
api_version: 1
threadsafe: true

handlers:
...


upload

  • appcfg.py update ./


Google App Engine project 생성











댓글 없음:

댓글 쓰기