Marek Kuziel - Deploying Django with Buildout

2,893 views
2,798 views

Published on

Slides from my presenation for NZPUG (http://nzpug.org/MeetingsChristchurch/Dec2008)

Published in: Technology
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,893
On SlideShare
0
From Embeds
0
Number of Embeds
24
Actions
Shares
0
Downloads
0
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

Marek Kuziel - Deploying Django with Buildout

  1. 1. Deploying Django with Buildout Marek Kuziel , Encode Ltd http://encode.net.nz/ [email_address]
  2. 2. Why Django with Buildout? <ul><li>Setting things up can be a real pain in the arse </li></ul><ul><li>Automation of a repeatable task </li></ul><ul><li>Having everything under control </li></ul><ul><li>Deployment strategy is be something a good developer should care about </li></ul><ul><li>You may find bugs/issues during the build process that you can patch and submit back to the community </li></ul><ul><li>5 minutes to learn. Lifetime to master. </li></ul>
  3. 3. Advantages <ul><li>It's a repeatable task. Things get tested often . </li></ul><ul><li>Great way to deal with development , QA , staging , production </li></ul><ul><li>Standalone Python environment , good for security and developer's sanity ;-) </li></ul><ul><li>Great way to keep your project up-to-date </li></ul>
  4. 4. How do we do things? <ul><li>Non-system-wide Python. Compile Python by hand. Don't mess with system-wide site-packages </li></ul><ul><li>Development , QA , Production Buildout configs </li></ul><ul><li>Development , QA , Staging , Production , Mobile Django settings that load general settings.py </li></ul><ul><li>Build Django apps as Eggs. Makes deployment to production easier. </li></ul>
  5. 5. Pre-requisities <ul><li>Python </li></ul><ul><li>http://svn.zope.org/*checkout*/zc.buildout/trunk/bootstrap/bootstrap.py </li></ul><ul><li>A terminal, because we'll do everything on a command line. </li></ul>
  6. 6. Let's start <ul><li>mkdir -p ~/projects/djangodemo </li></ul><ul><li>cd ~/projects/djangodemo/ </li></ul><ul><li>note: all commands from now on are executed from ~/projects/djangodemo/ directory </li></ul><ul><li>wget http://svn.zope.org/*checkout*/zc.buildout/trunk/bootstrap/bootstrap.py </li></ul><ul><li>or download http://encode.net.nz/m/django-with-buildout.tgz </li></ul>
  7. 7. Basic Buildout config for Django <ul><li>Create a new file called buildout.cfg </li></ul>[buildout] parts = django [django] recipe = djangorecipe version = 1.0
  8. 8. Let's bootstrap ~/Python/2.5/bin/python bootstrap.py <ul><li>running Python 2.5 compiled by hand. Located at ~/Python/2.5/ </li></ul><ul><li>running Buildout's boostrap process with bootstrap.py </li></ul>Creating directory '/Users/marek/projects/djangodemo/bin'. Creating directory '/Users/marek/projects/djangodemo/parts'. Creating directory '/Users/marek/projects/djangodemo/eggs'. Creating directory '/Users/marek/projects/djangodemo/develop-eggs'. Generated script '/Users/marek/projects/djangodemo/bin/buildout'.
  9. 9. Let's build ./bin/buildout Installing django. django: Downloading Django from: http://www.djangoproject.com/download/%s/tarball/ Generated script '/Users/marek/projects/djangodemo/bin/django'. ... and we're done!
  10. 10. Separating development from production <ul><li>Create a new file called development.cfg </li></ul>[buildout] extends = buildout.cfg parts += django-command-extensions eggs += Werkzeug [django] settings = development pythonpath += ${django-command-extensions:location} [django-command-extensions] recipe = infrae.subversion urls = http://django-command-extensions.googlecode.com/svn/trunk/ .
  11. 11. Let's build again ./bin/buildout -c development.cfg Unused options for buildout: 'eggs'. Installing django-command-extensions. Installing django. Generated script '/Users/marek/projects/djangodemo/bin/django'. django: Skipping creating of project: project since it exists ... and we're almost done :)
  12. 12. Adjusting settings <ul><li>Copy INSTALLED_APPS from project/settings.py to project/development.py </li></ul><ul><li>Add 'extensions' at the end of INSTALLED_APPS tuple </li></ul><ul><li>By copying INSTALLED_APPS to development you keep the production INSTALLED_APPS in settings.py and make custom INSTALLED_APPS in development.py </li></ul>
  13. 13. Time to start hacking, eh? <ul><li>./bin/django syncdb </li></ul><ul><li>./bin/django startapp demo </li></ul><ul><li>./bin/django runserver_plus </li></ul>Recommended reading: http://www.stereoplex.com/two-voices/a-django-development-environment-with-zc-buildout
  14. 14. Thank you!

×