• No results found

Django on AppEngine Documentation

N/A
N/A
Protected

Academic year: 2021

Share "Django on AppEngine Documentation"

Copied!
20
0
0

Loading.... (view fulltext now)

Full text

(1)

Django on AppEngine Documentation

Release

Sebastian Pawlu ´s

(2)
(3)

Contents

1 Installation 3

1.1 Download latest Google AppEngine SDK . . . 3

1.2 Install Django . . . 3

1.3 Create Django project . . . 3

1.4 Install django-rocket-engine . . . 3

1.5 Register application on Google AppEngine . . . 3

1.6 Create CloudSQL database. . . 4

1.7 Configuration. . . 4

2 Requirements 9 2.1 Google AppEngine SDK libraries: . . . 9

2.2 Python requirements.txt . . . 9 3 Blob Storage 11 4 Commands 13 4.1 appengine. . . 13 4.2 on_appengine. . . 13 5 Settings 15 5.1 DATABASES. . . 15 5.2 DEFAULT_FILE_STORAGE . . . 15 5.3 APPENGINE_PRE_UPDATE . . . 16 5.4 APPENGINE_POST_UPDATE . . . 16 i

(4)
(5)

Django on AppEngine Documentation, Release

Welcome to the documentation for django-rocket-engine - Django on AppEngine

Project is a helper library with main goal to help setup “correct” Django development environment for Google Ap-pEngine services.

Supports:

• basic support for pip style requirements, • support for virtualenv environments, • pre/post deployment hooks,

• seamless BlobStorage backend.

The project is still in the experimental stage, being more like proof-of-concept. Source code can be found ongithub. This project was inspired by the work of Waldemar Kornewald and Thomas Wanschik fromAll Buttons Pressed, some ideas where moved fromdjangoappengineproject.

Example application

(6)
(7)

CHAPTER

1

Installation

1.1 Download latest Google AppEngine SDK

Getthe latest version of SDK, if you are using Linux please make sure that SDK is available on your PATH (how?).

1.2 Install Django

InstallDjangoframework. There are many ways of doing that (suggestion is to usevirtualenvalong with virtualen-vwrapperandpip)

$ pip install django==1.3.1

Note: Version 1.3.1 is latest supported by SDK

1.3 Create Django project

Create a new, awesome Django project. Right now it’s even more awesome because this project will use AppEngine: $ django-admin.py startproject my_awesome_project

1.4 Install django-rocket-engine

Install latest version ofdjango-rocket-engine, with pip

$ pip install django-rocket-engine

1.5 Register application on Google AppEngine

Registernew application on Google AppEngine site.

(8)

1.6 Create CloudSQL database

Create a CloudSQL database instance usingGoogle Api Console, add application instance name from previous step in “Authorized applications”. Using “SQL Prompt” tab create a database inside your CloudSQL instance.

CREATE DATABASE database_name;

1.7 Configuration

Google AppEngine requires applications to have an config in app.yaml file, which is responsible for basic description, and how to manage the application. Create app.yaml inside project directory. Example of app.yaml for project. # app.yaml application: unique_appengine_appspot_id version: 1 runtime: python27 api_version: 1 threadsafe: true handlers: - url: /.* script: rocket_engine.wsgi libraries: - name: django version: 1.3 env_variables: DJANGO_SETTINGS_MODULE: ’settings’

Things that need to be done in settings.py are presented in code snippet below: # settings.py

from rocket_engine import on_appengine ...

# django-rocket-engine as every Django application

# needs to be added to settings.py file in INSTALLED_APPS section: INSTALLED_APPS = (

# other django applications here # ...

’rocket_engine’, )

# remove project name from ROOT_URLCONF. # AppEngine doesn’t treat project as a module # like normal Django application does.

ROOT_URLCONF = ’urls’

# to use different databases during # development process and on production.

if on_appengine: DATABASES = {

(9)

Django on AppEngine Documentation, Release ’default’: { ’ENGINE’: ’rocket_engine.db.backends.cloudsql’, ’INSTANCE’: ’instance:name’, ’NAME’: ’database_name’, } } else: DATABASES = { ’default’: { ’ENGINE’: ’django.db.backends.sqlite3’, ’NAME’: ’development.db’ } }

# disable debugging on production DEBUG = not on_appengine

Note: Instead of using sqlite3 backend your are able to use MySQL backend. This should also be your choice for serious applications.

That’s just about it. Application is ready to run: $ python manage.py syncdb

$ python manage.py runserver and deploy:

$ python manage.py on_appengine syncdb $ python manage.py appengine update --oauth2 Have fun!

1.7.1 Next Steps

Requirements

Google AppEngine SDK libraries:

Google AppEngine SDK comes with sets oflibraries. If there is a need to use one of them, you should append the library in your libraries seduction in app.yaml file rather to add them with use of requirements.txt file (explained below). Example of how to enable lxml in application.

# app.yaml # ... libraries: - name: django version: 1.3 - name: lxml version: 2.3 1.7. Configuration 5

(10)

Python requirements.txt

To bring AppEngine development to more pythonic status. The library comes with basic support for python packaging system, You can keep list of required packages in requirements.txt file in your project root directory. Example of requirements.txt for simple project may contains packages like:

django-tastypie django-taggit>=0.4

These packages will be downloaded and installed during deployment stage (manage.py appengine update). Require-ments file may also contain references to packages being under source control:

git+git://github.com/alex/django-taggit.git

git+git://github.com/jezdez/django-dbtemplates.git@master

Note: There is no need to add django or django-rocket-engine to your requirements.txt file. Those requirements are already satisfied.

Note: Editable requirements (prepended with -e option) are not supported. More about using requirements file might be readhere.

Commands appengine

Google AppEngine comes withappcfg.py to cover all functionality of the deployment process. This command is currently now wrapped by appengine django command and comes with some benefits of configuration hooks: python manage.py appengine update

Calling this command will send your code on remote AppEngine instance. This option comes with support of pre and post update hooks seeSettings.

on_appengine

To perform an operation on Google AppEngine from your local machine use: python manage.py on_appengine syncdb

This command will perform a sycndb operation on your remote instance. Google AppEngine doesn’t come with any kind of remote access mechanism (like SSH, Talent), this command helps to overcome this inconvenience. Any command invoked this way will be called to use of remote storage instead of your local one. This command only affects storage. Other useful examples might be.

• remote python shell:

python manage.py on_appengine shell

• remote CloudSQL shell:

python manage.py on_appengine dbshell • migrate database ifSouthis being used:

(11)

Django on AppEngine Documentation, Release

python manage.py on_appengine migrate

Blob Storage

To enable BlobStorage system as a Django storage, modify your code with elements presented below. # urls.py

urlpatterns = patterns( ...

url(r’^media/(?P<filename>.*)/$’,’rocket_engine.views.file_serve’), )

# settings.py

DEFAULT_FILE_STORAGE = ’rocket_engine.storage.BlobStorage’

Settings DATABASES

django-rocket-engine comes with pre-defined backend Google CloudSQL wrapper which prevents using your produc-tion database during development:

DATABASES = { ’default’: { ’ENGINE’: ’rocket_engine.db.backends.cloudsql’, ’INSTANCE’: ’instance:name’, ’NAME’: ’database_name’, } }

To distinguish between production and development. The library provides helper method which could applied in settings.py:

# settings.py

from rocket_engine import on_appengine ... if on_appengine: DATABASES = { ’default’: { ’ENGINE’: ’rocket_engine.db.backends.cloudsql’, ’INSTANCE’: ’instance:name’, ’NAME’: ’database_name’, } } else: DATABASES = { ’default’: { ’ENGINE’: ’django.db.backends.sqlite3’, ’NAME’: ’development.db’ } } 1.7. Configuration 7

(12)

DEFAULT_FILE_STORAGE

Use this setting to setup Blob objects as a default project storage.

DEFAULT_FILE_STORAGE = ‘rocket_engine.storage.BlobStorage’

APPENGINE_PRE_UPDATE

Callable that will be applied before sending application to Google AppEngine. Default:

APPENGINE_PRE_UPDATE = ’appengine_hooks.pre_update’

APPENGINE_POST_UPDATE

Callable that will be applied after sending application to Google AppEngine. Default:

APPENGINE_POST_UPDATE = ’appengine_hooks.post_update’ Example of appengine_hooks.py file:

from django.core.management import call_command

def pre_update():

call_command(’collectstatic’)

def post_update():

call_command(’on_appengine’, ’syncdb’)

# If south is being used

(13)

CHAPTER

2

Requirements

2.1 Google AppEngine SDK libraries:

Google AppEngine SDK comes with sets oflibraries. If there is a need to use one of them, you should append the library in your libraries seduction in app.yaml file rather to add them with use of requirements.txt file (explained below). Example of how to enable lxml in application.

# app.yaml # ... libraries: - name: django version: 1.3 - name: lxml version: 2.3

2.2 Python requirements.txt

To bring AppEngine development to more pythonic status. The library comes with basic support for python packaging system, You can keep list of required packages in requirements.txt file in your project root directory. Example of requirements.txt for simple project may contains packages like:

django-tastypie django-taggit>=0.4

These packages will be downloaded and installed during deployment stage (manage.py appengine update). Require-ments file may also contain references to packages being under source control:

git+git://github.com/alex/django-taggit.git

git+git://github.com/jezdez/django-dbtemplates.git@master

Note: There is no need to add django or django-rocket-engine to your requirements.txt file. Those requirements are already satisfied.

Note: Editable requirements (prepended with -e option) are not supported. More about using requirements file might be readhere.

(14)
(15)

CHAPTER

3

Blob Storage

To enable BlobStorage system as a Django storage, modify your code with elements presented below. # urls.py

urlpatterns = patterns( ...

url(r’^media/(?P<filename>.*)/$’,’rocket_engine.views.file_serve’), )

# settings.py

DEFAULT_FILE_STORAGE = ’rocket_engine.storage.BlobStorage’

(16)
(17)

CHAPTER

4

Commands

4.1 appengine

Google AppEngine comes withappcfg.py to cover all functionality of the deployment process. This command is currently now wrapped by appengine django command and comes with some benefits of configuration hooks: python manage.py appengine update

Calling this command will send your code on remote AppEngine instance. This option comes with support of pre and post update hooks seeSettings.

4.2 on_appengine

To perform an operation on Google AppEngine from your local machine use: python manage.py on_appengine syncdb

This command will perform a sycndb operation on your remote instance. Google AppEngine doesn’t come with any kind of remote access mechanism (like SSH, Talent), this command helps to overcome this inconvenience. Any command invoked this way will be called to use of remote storage instead of your local one. This command only affects storage. Other useful examples might be.

• remote python shell:

python manage.py on_appengine shell • remote CloudSQL shell:

python manage.py on_appengine dbshell • migrate database ifSouthis being used:

python manage.py on_appengine migrate

(18)
(19)

CHAPTER

5

Settings

5.1 DATABASES

django-rocket-engine comes with pre-defined backend Google CloudSQL wrapper which prevents using your produc-tion database during development:

DATABASES = { ’default’: { ’ENGINE’: ’rocket_engine.db.backends.cloudsql’, ’INSTANCE’: ’instance:name’, ’NAME’: ’database_name’, } }

To distinguish between production and development. The library provides helper method which could applied in settings.py:

# settings.py

from rocket_engine import on_appengine ... if on_appengine: DATABASES = { ’default’: { ’ENGINE’: ’rocket_engine.db.backends.cloudsql’, ’INSTANCE’: ’instance:name’, ’NAME’: ’database_name’, } } else: DATABASES = { ’default’: { ’ENGINE’: ’django.db.backends.sqlite3’, ’NAME’: ’development.db’ } }

5.2 DEFAULT_FILE_STORAGE

Use this setting to setup Blob objects as a default project storage.

(20)

DEFAULT_FILE_STORAGE = ‘rocket_engine.storage.BlobStorage’

5.3 APPENGINE_PRE_UPDATE

Callable that will be applied before sending application to Google AppEngine. Default:

APPENGINE_PRE_UPDATE = ’appengine_hooks.pre_update’

5.4 APPENGINE_POST_UPDATE

Callable that will be applied after sending application to Google AppEngine. Default:

APPENGINE_POST_UPDATE = ’appengine_hooks.post_update’

Example of appengine_hooks.py file:

from django.core.management import call_command

def pre_update():

call_command(’collectstatic’)

def post_update():

call_command(’on_appengine’, ’syncdb’) # If south is being used

References

Related documents

From the design day energy modeling, the HVAC system should only need to output ~1800 watts of cooling capacity to maintain temperature, however this is only to cancel the effects

Further studies of fitness level and heart disease demonstrated that regardless of body mass index (BMI) low fitness levels lead to increased risk of coronary heart disease (CHD)

For example, if the cms files reside in a directory called cms and you’ve moved the main index file into your websites root directory you’ll need to update the path in the file

Data of activities are not scrape data to stack web browser and strava api example python library implements an attacker attempts to it in django scaffolds out of great as guardian

Mixers Not Included... Mixers

Husbands permit/support women to participate 2 CHAs raise topic of health and care for children (diarrhea and infections, respiratory illness, early stimulation) and

A taxable gift results at the time the trust is estab- lished, but the gift tax is significantly reduced by the value of the income interest given to the school—de- creasing

ITEMS RANKED BY PERCENT ''EXCELLENT'' FOR 2010, 2011 AND 2012 4 ITEMS RANKED WITHIN DOMAIN BY AVERAGE SCORES FOR 2012 5 AVERAGE SCORES BY ITEM BY LOCATION TYPE FOR 2012 6