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 를 사용한다. 이유는 무료라서.
- Google Cloud SQL pricing : https://cloud.google.com/sql/pricing
- google cloud datastore pricing : https://cloud.google.com/datastore/docs/pricing
Django 에서 NoSQL 을 쓰기 위해 예전에는 django-nonrel 을 사용했는데, 이녀석이 빠르게 업데이트되지 않고해서, 요새 djangae 가 새롭게 떠오른다고 한다.
그래서 우리도 Djangae 를 사용해서 project 를 만들것이다.
Djangae 로 시작하기
대부분 아래 글에서 내용을 확인할 수 있다. 여기서는 좀 더 간략하게 설명한다.
djangae 로 project 를 시작하기 위해서 아래 skeleton 을 받자.
이제 아래 순서로 작업하면 된다. 여기서 project 이름을 muchart 로 한다.
- pip install django
- django-admin.py startproject --template https://github.com/potatolondon/djangae-scaffold/zipball/master --extension py,yaml,md muchart
- cd muchart
- python install_deps
- python manage.py check --deploy --settings=muchart.settings_live
- 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 = [
'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 ./
댓글 없음:
댓글 쓰기