<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom"><title>Simon Willison's Weblog: workflow</title><link href="http://simonwillison.net/" rel="alternate"/><link href="http://simonwillison.net/tags/workflow.atom" rel="self"/><id>http://simonwillison.net/</id><updated>2014-01-23T17:48:00+00:00</updated><author><name>Simon Willison</name></author><entry><title>What's the best way to keep track of changes to a project you're not directly contributing to on github?</title><link href="https://simonwillison.net/2014/Jan/23/whats-the-best-way/#atom-tag" rel="alternate"/><published>2014-01-23T17:48:00+00:00</published><updated>2014-01-23T17:48:00+00:00</updated><id>https://simonwillison.net/2014/Jan/23/whats-the-best-way/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/Whats-the-best-way-to-keep-track-of-changes-to-a-project-youre-not-directly-contributing-to-on-github/answer/Simon-Willison"&gt;What&amp;#39;s the best way to keep track of changes to a project you&amp;#39;re not directly contributing to on github?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This is what GitHub's "watch" feature is for: &lt;span&gt;&lt;a href="https://help.github.com/articles/watching-repositories"&gt;https://help.github.com/articles...&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/github"&gt;github&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/open-source"&gt;open-source&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/project-management"&gt;project-management&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/workflow"&gt;workflow&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="github"/><category term="open-source"/><category term="project-management"/><category term="quora"/><category term="workflow"/></entry><entry><title>What are optimal workflows for deploying one's web application?</title><link href="https://simonwillison.net/2012/Jan/14/what-are-optimal-workflows/#atom-tag" rel="alternate"/><published>2012-01-14T12:40:00+00:00</published><updated>2012-01-14T12:40:00+00:00</updated><id>https://simonwillison.net/2012/Jan/14/what-are-optimal-workflows/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/What-are-optimal-workflows-for-deploying-ones-web-application/answer/Simon-Willison"&gt;What are optimal workflows for deploying one&amp;#39;s web application?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The absolute first step is to automate your deployments. It's absolutely crucial that deploying the site is a single command. I've found Fabric (an automation tool written in Python) works extremely well for this - Capistrano is a popular alternative that uses Ruby instead.&lt;/p&gt;

&lt;p&gt;A simple policy that can help is this: never run a command on your remote server without putting it in a Fabric file first. This way your deploy and setups will always be repeatable, with almost no additional effort on your part.&lt;/p&gt;

&lt;p&gt;At Lanyrd our deployment process has evolved significantly over the past 18 months - our most recent setup, designed by our engineer Tom Insam, is pretty much my ideal situation. Here's (roughly) how it works.&lt;/p&gt;

&lt;p&gt;Our servers run on EC2 and are configured with Puppet. The Puppet roles are assigned as EC2 tags, which means we can start a new EC2 instance, assign tags to it (e.g. application-server, redis, cron-runner) and Puppet will do the rest of the setup.&lt;/p&gt;

&lt;p&gt;When we deploy, we specify an environment (e.g. development, staging or live) and a git branch or tag (default is master). Setting up our staging environment is trivial because of our Puppet-powered server configs - this also means makes it a no-brainer to turn it off when we're not using it (e.g. over the weekend) to save on EC2 server costs.&lt;/p&gt;

&lt;p&gt;We also have Jenkins set up to run our test suite every time someone commits to our git repository. Finally, we have a convenient "deploy master to live" button (we try to keep master shippable at all time, developing potentially site breaking features in a feature branch).&lt;/p&gt;

&lt;p&gt;There's a fair bet more to it than the above - we have the ability to roll back to a previous version by flipping a symlink should we break the site, and there's some extra stuff to handle pushing static assets to S3 and running database migrations. Overall it's an enormous improvement on my previous hacked-together fabric scripts, which were themselves a huge improvement over ad-hoc deploys via mucking around with SSH.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/webapps"&gt;webapps&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/workflow"&gt;workflow&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="webapps"/><category term="quora"/><category term="workflow"/></entry><entry><title>What does an ideal Django workflow setup look like?</title><link href="https://simonwillison.net/2010/Oct/22/what-does-an-ideal/#atom-tag" rel="alternate"/><published>2010-10-22T11:26:00+00:00</published><updated>2010-10-22T11:26:00+00:00</updated><id>https://simonwillison.net/2010/Oct/22/what-does-an-ideal/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/What-does-an-ideal-Django-workflow-setup-look-like/answer/Simon-Willison"&gt;What does an ideal Django workflow setup look like?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Short answer: virtualenv, pip, south for migrations, fabric for deployment.&lt;/p&gt;

&lt;p&gt;Long answer: I haven't seen the perfect tutorial covering all of the above yet, which is a shame, but here are some good links:&lt;/p&gt;

&lt;span&gt;&lt;a href="http://morethanseven.net/2009/07/27/fabric-django-git-apache-mod_wsgi-virtualenv-and-p.html"&gt;http://morethanseven.net/2009/07...&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;a href="http://www.saltycrane.com/blog/2009/05/notes-using-pip-and-virtualenv-django/"&gt;http://www.saltycrane.com/blog/2...&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;a href="http://www.clemesha.org/blog/modern-python-hacker-tools-virtualenv-fabric-pip"&gt;http://www.clemesha.org/blog/mod...&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;a href="http://www.caktusgroup.com/blog/2010/04/22/basic-django-deployment-with-virtualenv-fabric-pip-and-rsync/"&gt;http://www.caktusgroup.com/blog/...&lt;/a&gt;&lt;/span&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/django"&gt;django&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/workflow"&gt;workflow&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="django"/><category term="quora"/><category term="workflow"/></entry><entry><title>Getting from point A to B (the right way)</title><link href="https://simonwillison.net/2007/Oct/11/getting-from-point-a-to/#atom-tag" rel="alternate"/><published>2007-10-11T14:30:00+00:00</published><updated>2007-10-11T14:30:00+00:00</updated><id>https://simonwillison.net/2007/Oct/11/getting-from-point-a-to/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="http://ask.metafilter.com/73617/Getting-from-point-A-to-B-the-right-way#1095266"&gt;Getting from point A to B (the right way)&lt;/a&gt; on Ask MetaFilter&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;If your laptop is relatively recent it might have hardware support for virtualization (Intel Core Duo chips do, for example). If so, it's worth looking in to using VMWare or Parallels to run a virtual linux server locally on your machine. You'll need a fair amount of RAM for this as well - 2 GB minimum probably.&lt;/p&gt;
&lt;p&gt;I do this and it's fantastic as a development tool. I've got an Ubuntu virtual server which means I can install pretty much anything I want to with an apt-get - then I mount it to my &amp;quot;real&amp;quot; laptop over Samba so I can edit files with a local text editor. Best of both worlds.&lt;/p&gt;
&lt;p&gt;I can't recommend using source control enough - it's not that tricky to get started with and it means you'll never be afraid of changing code again (since you can always roll back). I'd go for Subversion - newer systems are more trendy, but for a single person getting started with version control subversion will probably be easiest to pick up. This book should help: http://www.pragprog.com/titles/svn2&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ask-metafilter"&gt;ask-metafilter&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/development"&gt;development&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mysql"&gt;mysql&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/php"&gt;php&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/platform"&gt;platform&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/web"&gt;web&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/workflow"&gt;workflow&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/work"&gt;work&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/efficiency"&gt;efficiency&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/optimization"&gt;optimization&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="ask-metafilter"/><category term="development"/><category term="mysql"/><category term="php"/><category term="platform"/><category term="web"/><category term="workflow"/><category term="work"/><category term="efficiency"/><category term="optimization"/></entry></feed>