Everything boils down to whether you'd like to run more than one app on
your box.

> While I love pip and virtualenv in development, I don't understand the
> advantage they offer over the system package manager on a production
> machine.

Easy: whenever you can't be bothered with proper containers. App X
requires package foo version 1.2, app Y requires foo version 1.4.

Docker solves this universally. You can also achieve a similar effect by
building a chroot. virtualenv's advantage is it doesn't require root,
and is (subjectively) easier to use.

Also dev = staging = live. Every difference between the environments is
a potential bug, ready to blow up in your face the moment you hit the
deploy button.

> In addition, I feel that a reasonable uwsgi package would include an
> rc-script to start your app automatically at system boot time.

I prefer to run my application servers with runit. Traditional RC
scripts usually assume one package = one application instance. Usually
that's a sane assumption (what would be your reason for running two
instances of Apache?) but again, if you can't be bothered with
containers, virtualenv+runit make it easy to just put app X in /home/x,
app Y in /home/y, then run two uwsgi's.

> There's no doubt that all of this could be hand hacked but the way I
> see it the less hand hacking on production machines, the better. It
> might just be my style, but I feel that the less work I have to do on
> a production system from the command line, the more reliable that
> system will be.

You've mentioned Puppet. Also check out Ansible.

K.

Reply via email to