blob: 044dfcdadb5693b6aa5e7729185b06de407a0c79 [file]
**********************
Google App Engine
**********************
.. image:: images/appengine-logo.gif
.. topic:: Introduction
This document explains how to get a PyAMF application running on Google
App Engine for Python.
`Google App Engine`_ (GAE) lets you run your web applications on Google's
infrastructure for free. You can serve your app using a free domain name
on the appspot.com domain, or use `Google Apps`_ to serve it from your
own domain.
GAE applications are implemented using Python 2.5.2. The `runtime
environment`_ includes the full Python language and most_
of the Python standard library, including :doc:`django`.
.. contents::
Prerequisites
=============
Before you can start using GAE you need to download and install:
- Python 2.5 or newer for your platform from `the Python website`_. Users of
Mac OS X 10.5 or newer already have an up-to-date Python installed.
- `Google App Engine SDK`_ for Python
- :doc:`PyAMF</community/download>` 0.3.1 or newer
Create Project
==============
Start a new GAE project:
- Create a new folder for your project
- Copy ``main.py``, ``app.yaml``, and ``index.yaml`` from
``google_appengine/new_project_template`` to your new folder. On a Mac
you can find it under ``/usr/local``
- Move the ``pyamf`` folder from your unpacked ``PyAMF-0.x.x`` folder
to the root folder of the new GAE project
Using a terminal the steps above would translate into something like:
.. code-block:: bash
cp -R /usr/local/google_appengine/new_project_template MyProject
cp -R PyAMF-0.5.1/pyamf MyProject
cd MyProject
ls -l
The folder structure of your project should look something like this:
.. code-block:: bash
+ MyProject
- app.yaml
- index.yaml
- main.py
- pyamf
Application
===========
You can setup your application using the ``WebAppGateway`` or the
``WSGIGateway``.
WebApp Gateway
--------------
The :class:`pyamf.remoting.gateway.google.WebAppGateway` class allows a GAE
application to handle AMF requests on the root URL and other standard HTTP
requests on another URL (``/helloworld`` in the examples below).
The ``main.py`` module tells GAE what code to launch. Modify it for PyAMF:
.. literalinclude:: ../examples/gateways/appengine/webapp.py
:linenos:
WSGI Gateway
------------
If you don't want to use the pure ``google.appengine`` approach as
described above, you can also use
:class:`pyamf.remoting.gateway.wsgi.WSGIGateway` by modifying your
``main.py`` like this:
.. literalinclude:: ../examples/gateways/appengine/wsgi.py
:linenos:
Start the server
================
Run this command from your application folder:
.. code-block:: bash
/usr/local/google_appengine/dev_appserver.py --debug --address=localhost --port=8080 .
Once the server started it usually prints something like:
.. code-block:: bash
INFO 2010-03-10 00:06:22,840 dev_appserver_main.py:399] Running application new-project-template on port 8080: http://localhost:8080
Test the application
====================
When you visit http://localhost:8080/helloworld in your browser it should
show a simple message:
.. code-block:: html
Hello, webapp World!
The AMF gateway is available on http://localhost:8080, so this should return a
405 in the browser:
.. code-block:: html
405 Method Not Allowed
To access this PyAMF gateway you must use POST requests (GET received)
Python
------
To test the gateway you can use a Python AMF client like this:
.. literalinclude:: ../examples/gateways/appengine/client.py
:linenos:
Flash
-----
Create a new Adobe Flash document and place a ``TextField`` on
the stage. Make it dynamic in the Properties pane, and give it
the instance name ``output``. Then, paste the following code
into the Actions pane:
.. literalinclude:: ../examples/gateways/appengine/flash.as
:language: actionscript
:linenos:
Run ``Debug`` > ``Debug`` movie to test PyAMF with Google App
Engine! Other examples for Flex etc can be found on the
Examples page.
Useful Resources
================
http://aralbalkan.com/1307
Aral Balkan - Building Flash applications with Google App Engine.
:doc:`../gateways/django`
PyAMF integration with Django.
:doc:`../actionscript/bytearray`
ByteArray example using Django and Flex.
http://blog.pyamf.org/2008/04/pyamf-and-google-app-engine
Related post on PyAMF blog.
http://pyamf-test.appspot.com
Run the PyAMF test suite on the Google App Engine.
.. _Google App Engine: http://code.google.com/appengine
.. _Google Apps: http://www.google.com/a/help/intl/en/index.html
.. _runtime environment: http://code.google.com/appengine/docs/python
.. _most: http://code.google.com/appengine/docs/python/purepython.html
.. _the Python website: http://python.org/download
.. _Google App Engine SDK: http://code.google.com/appengine/downloads.html