Django deployment best practices
Upcoming SlideShare
Loading in...5

Django deployment best practices






Total Views
Views on SlideShare
Embed Views



0 Embeds 0

No embeds



Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
Post Comment
Edit your comment
  • ----- Meeting Notes (2/12/13 12:10) -----json fixtures: primary key problems, skips, fixtures get of date when model changes

Django deployment best practices Django deployment best practices Presentation Transcript

  • Django Deployment { Tips, Tricks and Best Practices
  •  You mission, should you choose to accept it:  Make your application run with 1 click, everywhere it counts, every time.  Make your application run exactly the same way, everywhere it counts, every time.  Prove that the above are true.Reproducibility
  •  Reproducible Infrastructure  Reproducible Systems  Reproducible [Django] Applications  Dependencies  Configuration  Data  DeploymentSteps to Reproducibility View slide
  •  Systems: Virtual or Physical  Power Management  Console  Backup / Restore  Network Layer  Load Balancing  Security  PerformanceInfrastructure View slide
  •  A Stable Foundation  Stable Operating System  Reproducible Installation  Kickstart Install  Base Image  Configuration Management  Puppet, Chef  PackagingSystems
  •  What Python?  How will you install packages?  How will you make it reproducible?  Database?  Backup / Restore  Failover  Performance  Caching?  HTTP  Objects  Queuing?  SSL?Application Environment
  •  It’s just code, right?  Probably NotApplication
  •  Just use pip! lib/pypi-cache: Django-1.4.3.tar.gz Not so fast.  Lots of external requirements.txt: dependencies Django==1.4.3  Eliminate them with a local Type this: pip install --no-index --find-links cache file://$(PWD)/lib/pypi-cache -r Don’t’ forget requirements.txt virtualenv! Dependencies
  •   No logic allowed! from urlparse import urljoin  ‚unknown‛ from os import environ import times import dj_database_url #courtesy of Heroku  Critical DATABASES =  More of the same dj_database.config(default=‚xxx‛) BASE_URL = environ*‘DJANGO_BASE_URL’+ Consider pushing STATIC_URL = urljoin(BASE_URL, ‘static’) configuration in MEDIA_URL = urljoin(BASE_URL, ‘media’) externally via environ, Run this: configparser, etc DJANGO_BASE_URL= runserverConfiguration
  •  Fixtures. Consider fixtures/ writing them in from ..models import Poll, Choice def apply(): Python! p = Poll.objects.get_or_create(q=‘test q’,  Testable defaults=dict(pub_date=‘1980-01-01)) c1 = Choices.objects.get_or_create(poll=p,  More resilient to choice_text=‘option 1’) change  Less pk pain fixtures/tests/ Class PollFixtureTestCase(TestCase): def test_fixture_applied(): Migrations! self.assertEquals(Poll.objects.get(q=‘test q’)  Test them Application: Database
  • management/ django.db.models.signals import post_syncdbfrom south.signals import post_migratefrom .. import models, fixturesdef update_poll_fixtures(verbose=True): fixtures.poll.apply() if verbose: print "Updating dynamic fixtures for profile”def update_fixtures_post_syncdb(sender, **kwargs): update_poll_fixtures()def update_fixtures_post_migrate(app, **kwargs):if app == ’polls: update_poll_fixtures()post_syncdb.connect(fixtures_post_syncdb, sender=models)post_migrate.connect(fixtures_post_migrate)
  • Interwebs Back Up Everything! Move files to Green  Fabric?  RPM?  Tar?  Git?  Rsync? App App Deploy / Test Update Stuff  syncdb  apply fixtures Test Green! Flip/Flop Blue/Green Data (Roll back to Blue) Deployment: Blue/Green
  • Erik LaBianca, WiserTogether, Inc. @easel