Local/remote management commands
If you set your manage.py up as described in Installation, Djangae will allow you to run management commands locally or remotely.
Running Commands Locally
Django management commands run as normal, e.g.
./manage.py shell
Local Server Port Configuration
When you call runserver
the following ports are used by default:
- The default module (the main webserver) runs on port 8000
- Additional modules (defined by the
DJANGAE_ADDITIONAL_MODULES
setting) will use sequential ports from 8001 - The API server runs at port 8010
- The admin server runs at port 8011
- The blobstore service (which is used for uploads locally) runs on port 8012
If you override the base port (e.g. ./manage.py runserver localhost:9000
) then additional modules will use sequential
ports from 9001+. The admin, api and blobstore ports will remain the same.
If any ports are found to be in use, the port number will be incremented until a free one is found.
Additional modules
App Engine apps can be made up of multiple modules (the default being the one defined by app.yaml). If your
project makes use of additional modules then you can specify a list of yaml file paths in the DJANGAE_ADDITIONAL_MODULES
and these will be forwarded to the dev_appserver when runserver
is called
Running Commands Remotely
Djangae also lets you run management commands which connect remotely to the Datastore of your deployed App Engine application. To do this you need to:
Add the remote_api
built-in to app.yaml, and deploy that change.
builtins:
- remote_api: on
You also need to ensure that the application
in app.yaml is set to the application which you wish to connect to.
Then run your management command specifying the remote
sandbox.
./manage.py --sandbox=remote shell
This will use your local Python code, but all database operations will be performed on the remote Datastore.
Additionally, you can specify the application to run commands against by providing an --app_id
. Eg
./manage.py --sandbox=remote --app_id=myapp shell # Starts a remote shell with the "myapp" instance
Deferring Tasks Remotely
App Engine tasks are stored in the Datastore, so when you are in the remote shell any tasks that you defer will run on the live application, not locally. For example:
./manage.py --sandbox=remote shell
>>> from my_code import my_function
>>> from djangae.tasks.deferred import defer
>>> defer(my_function, arg1, arg2, _queue="queue_name")
Testing
Along with the local/remote sandboxes, Djangae ships with a test sandbox. This should be called explicitly
from your manage.py when tests are being run. This sandbox sets up the bare minimum to use the Datastore
connector (the memcache and Datastore stubs only). This prevents accesses to the Datastore from throwing an error
when you do so outside a test case (e.g. from settings.py
).
Your tests should setup and teardown a full testbed instance (see DjangaeDiscoverRunner
and the nose plugin).