ラベル Google App Engine の投稿を表示しています。 すべての投稿を表示
ラベル Google App Engine の投稿を表示しています。 すべての投稿を表示

2011年12月3日土曜日

GAE1.6+Python2.7+DjangoでSessionを使う

Googleが公開しているDjangoの使い方は随分と古いが、Sessionをsettingsから外すように書かれている。これだとrequest.sessionが使えないのでappengine_djangoなどのツールを使ってSessionMiddlewareを差し込むわけだが、ただそれだけのためにごちゃごちゃと3rd partyのライブラリを入れるのは悔しいので、最低限度の方法を試してみた。

appengine_djangoには、Session保存のバックエンドとしてmemcacheを使うモジュールが公開されているのでこれを使うことにした。このスレッドの#2からリンクされているcache_backend.pyをプロジェクトの適当な場所(自分はlib配下)に保存し、settings.pyに以下を追加。


MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
)

# http://code.google.com/p/google-app-engine-django/issues/detail?id=57                                       
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
CACHE_BACKEND = 'lib.cache_backend://'

これでめでたくDjangoのviewでrequest.sessionを使えるようになる。

2011年12月2日金曜日

GAE 1.6+Django 1.2

Google App Engine 1.6.0から公式にPython 2.7+Django 1.2がサポートされたということなんだけど、ぐぐってみても従前からのappengine-djangoを使う方法ばかりでてきてよくわからん。

ということで色々試してみた。以下、わかったこと:

1. Djangoをzipする必要なし
ただしdjango-admin.pyとかmanage.pyとかで楽チンすることはできなくなる。まあ、そんなに面倒な事もないでしょ。GAEのコンソールも使えるし。

2. ローカルにDjangoをインストールする必要もなし
google_appengineディレクトリ配下に必要なDjangoのライブラリは入っている。

3. Virtualenvの元でも動く
先日書いたとおり

で、django-admin.py使わないということはディレクトリ配置やsettings.pyとかurls.pyとかを自前で打ち込むということなわけで、大した話ではない。まずディレクトリ配置はこんな感じ。
.
├── app.yaml
├── main.py
├── project
│   ├── __init__.py
│   ├── poll
│   │   ├── __init__.py
│   │   ├── views.py
│   ├── settings.py
│   ├── templates
│   │   └── __init__.py
│   ├── urls.py

app.yaml
librariesというエントリでDjango 1.2を使うことを宣言。
application: helloworld
version: 1
runtime: python27
api_version: 1
threadsafe: true

handlers:
- url: /.*
  script: main.app

libraries:
- name: django
  version: "1.2"

main.py
settings.pyの所在を定義。

import os

os.environ['DJANGO_SETTINGS_MODULE'] = 'project.settings'

import django.core.handlers.wsgi
app = django.core.handlers.wsgi.WSGIHandler()

project/settings.py
必要なライブラリとアプリケーション所在場所、urls.pyの場所を定義。テンプレートを使う場合はその所在場所を定義。

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
)

INSTALLED_APPS = (
    'project.poll'
)

ROOT_URLCONF = 'project.urls'

import os
ROOT_PATH = os.path.dirname(__file__)
TEMPLATE_DIRS = (
    ROOT_PATH + '/templates',
)


project/urls.py
URL定義は通常のDjangoアプリと同じ。

from django.conf.urls.defaults import *

urlpatterns = patterns('',
    (r'^$', 'project.poll.views.index'),
    )

project/poll/views.py
テスト用簡単なview

from django.conf.urls.defaults import *

urlpatterns = patterns('',
    (r'^$', 'project.poll.views.index'),
    )
(GAE)masayang@ubuntu-vm:~/Documents/GAE/dempa$ cat project/poll/views.py
from django.http import HttpResponse

def index(request):
    return HttpResponse("Hello")


2011年4月30日土曜日

Amazon謹製Linux AMIでGAE開発しようとしたらPython2.5が入ってなかった、の巻

この後買う予定のEee Pad TransformerとAmazon EC2だけで開発をしてみようと思っているのだが、当面は一人での開発なのでMicro Instanceでやってみようと決意。で、これは非力なので自分が得意のGentooは苦しい。

そこでAmazon謹製Linux AMI(ami-8c1fece5)を使うことにしたのだが、なんとPythonは2.6しか載ってない。慣れないyumコマンドで調べてみたが、どうやらPythonは2.4と2.6しか用意されていない模様。

ちうわけで、ソースからコンパイルすることにした。って、結局Gentooより手間かかってるし(苦笑

1. コンパイラとかぶちこむ。
# yum groupinstall "Development Tools"
2. Python 2.5.5のソースを取ってきて展開。
3. /opt/python2.5の下に設置する
$ ./configure --prefix=/opt/python2.5
$ make
$ sudo make install
4. シンボリックリンク作成
# ln -s /opt/python2.5/bin/python /usr/bin/python25
# ln -s /opt/python2.5/bin/python /usr/bin/python2.5
5. /etc/ld.so.conf.d/opt-python2.5.confを作成。中身は以下の一行。
/opt/python2.5/lib
6. ldconfig実行
# ldconfig
7. virtualenvとvirtualenvwrapperのソース取ってきて、設置。それぞれ
$ sudo python setup.py install
8. GAE SDKのソース取ってきて展開。PATHを通しておく。
9. GAE用のVirtualenv設置
$ source virtualenvwrapper.sh
$ mkvirtualenv -p python25 GAE
$ workon GAE
(GAE) $
10. sqlite3周り
$ sudo yum install sqlite-devel
$ easy_install pysqlite
11. PIL周り
$ easy_install pil


EC2のMicro Instanceは安いし、起動・停止が速い。必要なときにコンソールから起動して、開発作業を終えたらコンソールから停止。Stop、ね。Terminateしたら全てが消える(笑

Security Groupで自端末からsshのみ繋がるようにして、ssh接続時にDynamicForward使えば他所からの変なアタックに悩むこともないでしょ。