Slide 1

Slide 1 text

Django on Heroku Michael Warkentin @mwarkentin Friday, 16 March, 12

Slide 2

Slide 2 text

What is Heroku? Friday, 16 March, 12

Slide 3

Slide 3 text

A Polyglot Platform as a Service Friday, 16 March, 12

Slide 4

Slide 4 text

Ruby Friday, 16 March, 12

Slide 5

Slide 5 text

Python Friday, 16 March, 12

Slide 6

Slide 6 text

Node.js Friday, 16 March, 12

Slide 7

Slide 7 text

Java Friday, 16 March, 12

Slide 8

Slide 8 text

Why Heroku? Friday, 16 March, 12

Slide 9

Slide 9 text

Empower your devs Friday, 16 March, 12

Slide 10

Slide 10 text

Somewhere in Panama... Friday, 16 March, 12

Slide 11

Slide 11 text

Friday, 16 March, 12

Slide 12

Slide 12 text

Somewhere in Canada... Friday, 16 March, 12

Slide 13

Slide 13 text

Friday, 16 March, 12

Slide 14

Slide 14 text

1.5 hours from initial idea to functioning deployment Friday, 16 March, 12

Slide 15

Slide 15 text

Over 30 addons including: • Redis • New Relic • Papertrail • RabbitMQ • Sentry • Sendgrid Friday, 16 March, 12

Slide 16

Slide 16 text

Heroku Commands Friday, 16 March, 12

Slide 17

Slide 17 text

Creating a new app heroku create --stack cedar Friday, 16 March, 12

Slide 18

Slide 18 text

Deploying master to Heroku git push heroku master Friday, 16 March, 12

Slide 19

Slide 19 text

Deploying a branch to Heroku git push heroku :master Friday, 16 March, 12

Slide 20

Slide 20 text

Procfile web: python app/manage.py run_gunicorn -b 0.0.0.0:$PORT -w 3 worker: python app/manage.py celeryd Friday, 16 March, 12

Slide 21

Slide 21 text

Viewing processes heroku ps Friday, 16 March, 12

Slide 22

Slide 22 text

Scaling processes heroku ps:scale web=2 worker=4 Friday, 16 March, 12

Slide 23

Slide 23 text

Setting config variables heroku config:add DEBUG=True Friday, 16 March, 12

Slide 24

Slide 24 text

Tailing app logs heroku logs --tail Friday, 16 March, 12

Slide 25

Slide 25 text

Database backup heroku pgbackups:capture Friday, 16 March, 12

Slide 26

Slide 26 text

Copy production database to staging heroku pgbackups:restore DATABASE `heroku pgbackups:url --app app-prod` --app app-staging Friday, 16 March, 12

Slide 27

Slide 27 text

Local development with gunicorn and foreman Friday, 16 March, 12

Slide 28

Slide 28 text

Run local environment from the same Procfile Friday, 16 March, 12

Slide 29

Slide 29 text

$ foreman start Friday, 16 March, 12

Slide 30

Slide 30 text

Add local environment variables to .env file Friday, 16 March, 12

Slide 31

Slide 31 text

What can we learn from Heroku? Friday, 16 March, 12

Slide 32

Slide 32 text

http://www.12factor.net/ Friday, 16 March, 12

Slide 33

Slide 33 text

Store config in the environment Friday, 16 March, 12

Slide 34

Slide 34 text

No local_settings.py Friday, 16 March, 12

Slide 35

Slide 35 text

AWS_SECRET_ACCESS_KEY =”F234324jskfj” Friday, 16 March, 12

Slide 36

Slide 36 text

AWS_SECRET_ACCESS_KEY =”F234324jskfj” Friday, 16 March, 12

Slide 37

Slide 37 text

AWS_SECRET_ACCESS_KEY = os.environ.get('AWS_SECRET_AC CESS_KEY') Friday, 16 March, 12

Slide 38

Slide 38 text

New version created on: • Every code push • `git push heroku master` • Every config change • `heroku config:add DEBUG=True` Friday, 16 March, 12

Slide 39

Slide 39 text

Live demo OMFG!!1 Friday, 16 March, 12

Slide 40

Slide 40 text

Further reading • http://devcenter.heroku.com/articles/django • http://rdegges.com/devops-django-part-3-the-heroku-way • http://rdegges.com/devops-django-part-4-choosing- heroku • https://github.com/waveaccounting/public-site/pull/5 Friday, 16 March, 12

Slide 41

Slide 41 text

Unanswered questions • Graceful reload of gunicorn for local development • Still cycling it manually when I make changes to .py files • How hard is it to use a custom buildpack? • https://github.com/bolster/heroku-buildpack-bolster/ commit/ae6dd97b9bdc9db29fd286f76f40d104c48b6a7c • Can we get Wave Accounting running on Heroku? Friday, 16 March, 12

Slide 42

Slide 42 text

Photo Credits Ruby: http://www.flickr.com/photos/vissago/2691363050/ Python: http://www.flickr.com/photos/smb_flickr/5140800350/ Node.js: http://www.flickr.com/photos/spigoo/6501844/ Java: http://www.flickr.com/photos/london/33968122/ Panama: http://www.flickr.com/photos/a-barth/4466781603/ Canada: http://www.flickr.com/photos/raveneye/2238545040/ Friday, 16 March, 12