A combination of Vagrant 1.6+ and Ansible 1.8+ is used to setup the development environment for this project. The project consists of the following virtual machines:
app
services
tiler
worker
The app
virtual machine contains an instance of the Django application, services
contains:
- PostgreSQL
- Pgweb
- Redis
- Logstash
- Kibana
- Graphite
- Statsite
tiler
contains:
- Windshaft
- Mapnik
worker
contains:
- Celery
Use the following command to bring up a local development environment:
$ MMW_ITSI_SECRET_KEY="***" vagrant up
The application will now be running at http://localhost:8000.
After pulling in new commits, you may need to run the following two commands:
$ ./scripts/manage.sh migrate
$ ./scripts/manage.sh reload_dev_data
See debug messages from the web app server:
$ ./scripts/debugserver.sh
Watch the JavaScript and SASS files for changes:
$ ./scripts/bundle.sh --debug --watch
When creating new JavaScript or SASS files, you may need to stop and restart the bundle script.
If you add a JS dependency and want it to be included in the vendor.js
bundle, you will need to update the JS_DEPS
array in bundle.sh
accordingly.
If changes were made to the one of the VM's configuration or requirements since the last time you provisioned, you'll need to reprovision.
$ vagrant provision <VM name>
After provisioning is complete, you can login to the application server and execute Django management commands:
$ vagrant ssh app
vagrant@app:~$ envdir /etc/mmw.d/env /opt/app/manage.py test
Note: If you get an error that resembles the following, try logging into the app
virtual machine again for the group permissions changes to take effect:
envdir: fatal: unable to switch to directory /etc/mmw.d/env: access denied
The Vagrant configuration maps the following host ports to services running in the virtual machines.
Service | Port | URL |
---|---|---|
Django Web Application | 8000 | http://localhost:8000 |
Graphite Dashboard | 8080 | http://localhost:8080 |
Kibana Dashboard | 5601 | http://localhost:5601 |
PostgreSQL | 5432 | psql -h localhost |
pgweb | 5433 | http://localhost:5433 |
Redis | 6379 | redis-cli -h localhost 6379 |
Testem | 7357 | http://localhost:7357 |
Tiler | 4000 | http://localhost:4000 |
In order to speed up things up, you may want to consider leveraging the vagrant-cachier
plugin. If installed, it is automatically used by Vagrant.
Run all the tests:
$ ./scripts/test.sh
To run all the tests on the Django app:
$ ./scripts/manage.sh test
Or just for a specific app:
$ ./scripts/manage.sh test appname
When creating new tests or debugging old tests, it may be easier to open the testem page, which polls for changes to the test bundle and updates the test state dynamically.
First, start the testem process.
$ ./scripts/testem.sh
Then view the test runner page at http://localhost:7357.