Revsys "Office Hours" - November 5, 2010
This is a transcript of our "office hours" held November 5th, 2010. The transcript has been lightly edited to group conversations into a more structured Q&A.
Contents:
- What sort of market do you think there is for training stuff w/r/t django?
- In the Django admin, how can we get a single inline fieldset?
- Have you guys seen any initial fallout from the changes in MySQL licensing? expecting any?
- There seems to be a huge hole in the middle-ground (too big for shared, too small for full-time sysadmin) Django hosting. Where do you send folks looking for a happy medium these days?
- What's up with hidden hires?
- How can we host 1.5 thousand Django sites?
- Should there be more incentives for new comers to Django?
- Is it true that the MySQL backend ignores db_index entirely?
- What would you say is the best way to promote a new Django-app in the Django community not being a known developer in it?
- How many more revsys-type companies do you think could exist based on your workload? Also, how do you see the Django job market looking these days in general?
- How do I cleanly handle multi-server rollouts using Chef?
- Alex_Gaynor_: are there any plans to implement a couchdb backend based on your work on NoSQL ?
- What suggestions do you have for a django dev to start helping out with django core development.
- Beyond NFS are there any new and interesting ways to locally (ie not Amazon EC2) share media between app servers?
- I remember getting "bored" with building website with PHP. Do you ever get bored with building Django sites?
- What are your thoughts on the various Postgres ecosystem tools (pgpool, slony, etc)?
- What is the stack that you all are recommending/using these days? (wsgi/frontend/load balancing/data-mulleting)?
- Do you guys have to mess with RHEL much?
- Are y'all happy with rabbitmq? have you tried redis as an mq?
- What are the main upsides to gunicorn vs mod_wsgi and Apache?
- With the nginx/gunicorn setup (something I've been using on my recent projects as well), do you use nginx proxy_cache as an upstream cache or memcached or something else?
- What are you guys watching gunicorn with, supervisord?
- What do you guys use for system monitoring (mmonit, munin, nagios?)
- Anyone played with "cloudflare" yet?
- Is there anything from other frameworks you wish Django had?
- Have you all done anything supporting websockets?
- You guys have anybody asking you to do stuff on AppEngine?
- What are you guys using for social logins and authentication without reinventing the wheel?
- Do you guys have any experience in using Django in a PCI-compliant app?
- jacobkm: Do you think there are any ways to reduce the friction there is in using 'pluggable' django apps?
- In your classes, what do you find people struggle with the most?
- Which do you generally use of pip+venv or buildout these days?
- Is it reasonable/possible to use django trunk for production anymore, seems like not?
- How do you guys handle packages once a site is in production?
- How do you handle patching existing projects?
- How many other people make up RevSys at any given time?
- How's your workload spread out these days?
- Which cloud provider do you guys use the most these days?
- Any plans to do more of these in the future?
- justinlilly
- What sort of market do you think there is for training stuff w/r/t django?
- fwiles tacks up a sign on the wall, "Now serving Customer #1"
- justinlilly
- Specifically something akin to peepcode, but with more of a systems/deployment/django/python flavor.
- jacobkm
- justinlilly: I think there's a market, certainly, but you'd have to be careful.
- jacobkm
- i.e. my classes generally do OK, but Django books on average tend not to sell well at all.
- amjoconn
- re: books, I guess the online docs are just too good/readable.
- justinlilly
- amjoconn, there are gaps.
- jacobkm
- I think Django's good documentation means that beginner-oriented material is hard to justify charging for. I know of at least one publisher who's decided not to print any more Django books because they decided they can't compete with the docs.
- justinlilly
- I'm thinking pragmatic, short format things. $X to learn what you need to know to get a reasonable django site deployed to AWS.
- Alex_Gaynor_
- justinlilly: Besides the deployment step, is there anything there that isn't in the docs?
- jacobkm
- justinlilly: yup, that's pretty much where I target my classes -- towards people who've already written Django sites and need to know what to do *next. Best practices, external stuff, deployment, etc.
- justinlilly
- Alex_Gaynor_, stuff circling third party libraries, more information on testing strategies, etc.
- justinlilly
- ie: how do I setup celery, how do I scale celery, what about celery will bite me in the ass?
- justinlilly
- celery solves problems X,Y,Z.. what other solutions exist to those 3 problems.
- kennethlove
- In the Django admin, how can we get a single inline fieldset?
- kennethlove
- If we set `extra=0` and `max_num=0`, we get a single inline formset but the save never goes through. This non-save behavior happens for any combination where `extra` or `max_num` is 0. If we specify `max_num=1` and leave off `extra`, the save goes through but we get two inline fieldsets.
- ipmb
- kennethlove: what version of Django are you using?
- kennethlove
- ipmb: 1.2.3
- jacobkm
- kennethlove: I think you just need extra=1, max_num=1.
- fwiles
- kennethlove: you just need to set extra=1 and leave max_num alone
- kennethlove
- jacobkm: had that and still got 2
- fwiles
- kennethlove: er rather unset
- fwiles
- kennethlove: I just tested it on 1.2.3 on an inline with extra=1 and it works as expected
- kennethlove
- fwiles: extra=1 with no max_num set gives 2 fieldsets still.
- ipmb
- kennethlove: any spare .pyc files lying around?
- kennethlove
- ipmb: let me check
- kennethlove
- ipmb: nope, no spare pycs.
- fwiles
- kennethlove: hmmm not sure what's going on there
- fwiles
- fwiles: lemmie play a bit in some test code
- kennethlove
- fwiles: me neither. hence the asking :)
- ipmb
- kennethlove: can you import it in a shell and get the expected values?
- unbracketed
- Have you guys seen any initial fallout from the changes in MySQL licensing? expecting any?
- jacobkm
- unbracketed: we've seen a few folks looking to transition from mysql to postgresql (right fwiles?) Also over the past few years it's gotten a *lot* easier to convince people to use postgres -- now most don't even need to be sold on it.
- fwiles
- unbracketed: While I hear grumblings from people all the time that with the Oracle purchase they are looking at PostgreSQL. But honestly most of the time it's due to needing advanced features (GeoDjango for example) or performance problems is the main reason they are switching
- fwiles
- unbracketed: that and I hard sell all of our clients on it :)
- ipmb
- There seems to be a huge hole in the middle-ground (too big for shared, too small for full-time sysadmin) Django hosting. Where do you send folks looking for a happy medium these days?
- Alex_Gaynor_
- ipmb: What do you mean by middleground? Something between web faction and a VPS?
- ipmb
- smaller
- ipmb
- Alex_Gaynor_: a VPS for people that aren't sysadmins
- ipmb thinking EngineYard
- jacobkm
- ipmb: well, we send 'em to us :)
- fwiles
- ipmb: to us actually
- fwiles thinks there will be a rumor that jacobkm and I share a brain
- jacobkm
- MediaTemple's offering is a fairly good deal for mid-range stuff.
- jacobkm
- ipmb: see http://mediatemple.net/webhosting/gs/features/containers.php#django
- jacobkm
- ipmb: give MT a whirl. There's also at least 4 startups I know of working on "Heroku for Django" type offerings; I expect to see those launching soon, I hope.
- fwiles
- ipmb: we don't usually see that size of client honestly, so I'm not sure where I would send them
- fwiles
- Heroku for Django is going to be big for the community
- jacobkm
- The only one I know of with any public presence so far is https://www.djangy.com/. Looks like still private beta.
- jacobkm
- If there are others I don't know of that have anything public someone jump in and let me know, eh?
- Alex_Gaynor_
- jacobkm: andrewgodwin has said he's working on something with bfirsh, not sure they have anything public though
- andrewgodwin
- no, we're not public yet
- jacobkm
- Alex_Gaynor_: well, those are some pretty good names to be associated. Not sure who's behind Djangy, but the fact that they have docs (https://www.djangy.com/docs) even before a public offering is a good sign. Shows that someone understands the community standards :)
- jacobkm
- andrewgodwin: hurry up, dang it :)
- andrewgodwin
- jacobkm: I keep telling bfirsh we need docs as a high priority :)
- andrewgodwin
- yeah, I'm working on it right now
- andrewgodwin
- it self-hosts its own site, which is nice.
- justinlilly
- ipmb, also, asenshi is/was working on something.
- ipmb
- What's up with hidden hires?
- jacobkm
- ipmb: it's still being born, sadly -- other work intruded.
- nicoechaniz
- How can we host 1.5 thousand Django sites?
- nicoechaniz
- At the NGO where I'm working we are developing the third version of the Cyclope CMS, this time in Python/Django, as opposed to PHP for previous versions.
- nicoechaniz
- We host over 1.5 thousand sites for other latin american NGO's most of them with very little traffic.
- nicoechaniz
- The big problem we have with Cyclope 3 is that if we move al 1.5K sites over, we'll need near 30Gb RAM, just to host sites that get almost no traffic at all.
- nicoechaniz
- Are there any guides for this kind of deployment scenario?
- quantumsummers|a
- I would like to note that initial testing of the Amazon AWS EC2 micro instance for small-ish django-based sites is very positive (evening using apache+mod_wsgi). At $0.02/hr (linux) its a rather inexpensive option.
- jacobkm
- nicoechaniz: wow, that's a big question -- going to be *really* hard to answer without a *lot* more details.
- fwiles
- nicoechaniz: I'm assuming mod_wsgi, look into gunicorn as you can likely run man smaller instances sanely thath way
- nicoechaniz
- Well, I can give all the details you ask for : )
- jacobkm
- nicoechaniz: in a nutshell, virtualization (as quantumsummers|a suggests) is one option; the other is multi-tenancy (where a single Django instance is capable of running multiple sites). Both are fairly domain-specific.
- fwiles
- nicoechaniz: also if you're not already doing so, using something like nginx or varnish in front would drastically reduce the number of django processes you need
- ericholscher
- nicoechaniz: we have a similar problem actually, tho we kind of punted on the resource usage because it pales in comparison to the dev time it would take to do it more complexly
- nicoechaniz
- we are actually trying to go for multi-tenancy
- nicoechaniz
- we cannot go for Clouds (like Amazon, etc.) because of political decissions, etc. in this kind of organizations
- fwiles
- nicoechaniz: is the 30GB number from a cold start or does it just grow to that over time?
- ipmb
- nicoechaniz: mod_wsgi supports an inactivity-timeout as well
- nicoechaniz
- jacobkm: we have been working hard on the multi-tenancy option
- jacobkm
- nicoechaniz: one hint is that although the documentation says that you shouldn't modify settings at runtime, in fact many of them *can* be changed at runtime without problems. Unfortunately there's a bit of a trial-and-error in figuring out which.
- nicoechaniz
- fwiles: cold start
- jacobkm
- nicoechaniz: I keep meaning to actually run through all of them and put together some documentation on which can and can't be modified at run time.
- nicoechaniz
- jacobkm: yeah, we have been banging our heads with that precise issue : )
- nicoechaniz
- jacobkm: that would really be great
- jacobkm
- nicoechaniz: yup, me too. It's tricky, and we've done a bad job internally being clear about which settings are which.
- fwiles
- nicoechaniz: how many apache children are you running then?
- jacobkm
- nicoechaniz: the big problem is that even if some settings *are* changeable at runtime, you're still going to need to worry about threading issues. So, yeah, it's a complicated problem. I think I'd need to see your code to have any more concrete suggestions.
- nicoechaniz
- jacobkm: we have created a Proxy model for runtime-settings
- nicoechaniz
- jacobkm: it stores it's values in threading.local
- nicoechaniz
- jacobkm: the branch we are working on atm is not public yet. But I can commit it if you would like to take a look at what we are trying to do
- jacobkm
- Yeah, that's pretty much how I'd start. Like I said, I think it'd be trial-and-error for me, too...
- gargoyle-grin
- jacobkm: I understand. Not a problem. ;)
- jacobkm
- nicoechaniz: sure, if you like -- I can't promise I'll have time but I'll try.
- quantumsummers|a
- nicoechaniz: you have an interesting situation there, what sort of hardware are you running this on, as it sounds like a single box?
- nicoechaniz
- jacobkm: great : ) is there a ticket regarding this documentation issue?
- jacobkm
- nicoechaniz: I *think* so - let me look...
- nicoechaniz
- it's a 8 core 8Gb box ATM
- nicoechaniz
- quantumsummers|a: can scale to 20Gb RAM I think
- fwiles
- nicoechaniz: database living on the same box?
- nicoechaniz
- fwiles: yep
- fwiles
- nicoechaniz: moving that off would be one of the first steps honestly
- quantumsummers|a
- nicoechaniz: I see. you may have some success with vserver "containers" and limiting the vhosts running per container. but regardless that is a huge number of site for a single machine
- nicoechaniz
- fwiles: we actually haven't moved the 1.5k sites yet. We won't till we can figure this out : )
- ipmb
- nicoechaniz: how often is the content changing? Something like https://github.com/luckythetourist/staticgenerator could relieve a lot of app server load
- nicoechaniz
- quantumsummers|a: well... most of them are just sitting there.. so it's not such a big deal. They are now hosted in Cyclope2/PHP on an athlon 2Gb machine : )
- quantumsummers|a
- nicoechaniz: for migrating all of this, you may consider a single "project" that uses the row-based perms hooks to keep things separated, and the sites framework to handle all the various sites. Just a thought
- nicoechaniz
- quantumsummers|a: yeah, that's another option we have been looking into. But jacobkm's multi-tenancy approach is more what we are after ATM.
- nicoechaniz
- jacobkm: I've been trying to find a ticket about this issue of settings that can and cannot be modified at runtime, but found none... Should I open one?
- jacobkm
- nicoechaniz: sure, go ahead.
- nicoechaniz
- jacobkm: I added http://code.djangoproject.com/ticket/14628, let me know if it's explained correctly; english isn't my mother languaje : )
- jacobkm
- nicoechaniz: that's good; I added a note there.
- Alex_Gaynor_
- nicoechaniz: your english is better than my spanish
- nicoechaniz
- : )
- fwiles
- nicoechaniz: your english is better than my.... everything else :)
- nicoechaniz
- jacobkm: do you think it would be useful to open a related ticket to discuss multi-tenancy, thread safety issues, etc. ?
- maraujop
- Should there be more incentives for new comers to Django?
- maraujop
- Since 6 or 7 months I have been using Django. I've sent some patches to Django-apps in Github, one patch for GeoDjango, I've released my own Django-app (django-rules). I have been looking on how Django deals development, but I honestly think there should be more incentives for new comers, more easy-pickings and maybe a less formal way to discuss new ideas or enhancements for Django. what do you think?
- Alex_Gaynor_
- maraujop: We definitely want to lower the barriers to contribution to Django itself, however we really have a limited number of time time spent marking tickets as easy-pickings is time lost from developing new patches. Anything new contributors can do on this front would be super valuable, and hopefully #django-dev here can be a slightly less formal enviroment thant the mailing list
- maraujop
- Alex_Gaynor_: Thanks Alex, you are probably right. However I have had this feeling in django-dev before, that nobody reads, that I'm talking to no one
- gargoyle-grin
- Is it true that the MySQL backend ignores db_index entirely?
- gargoyle-grin
- if so, what is the reason for it?
- jacobkm
- gargoyle-grin: I'd be surprised if that was true, but frankly I don't particularly care :)
- jacobkm
- (Gotta get the minute of MySQL hate in -- sorry :)
- Alex_Gaynor_
- gargoyle-grin: This is not true, however it is true that MySQL itself ignores indexes in all sorts of cases
- fwiles
- gargoyle-grin: And no it creates the indexes, I just checked on a MySQL system
- Alex_Gaynor_
- fwiles: Checking the source is much faster
- fwiles
- Alex_Gaynor_: I had a recently built mysql server laying around
- gargoyle-grin
- Alex_Gaynor_, fwiles: Hrmph. Ok. Thanks for the input. I'm now more confused than I was. XD Stil helpful, though.
- gargoyle-grin
- Alex_Gaynor_, fwiles: It occurrs to me that we might be speaking of two different things. I'm speaking of field=models.SomeGenericField(db_index=True). That doesn't seem to do anything whatsoever on MySQL.
- gargoyle-grin
- Alex_Gaynor_, fwiles: The MySQL backend *does* create indexes for primary keys, foriegn keys, unique fields, etc...
- Alex_Gaynor_
- gargoyle-grin: how are you viewing the sql? using manage.py sql won't show index creation, use manage.py sqlall
- Alex_Gaynor_
- gargoyle-grin: there's nothing special about how those fields become indexed, they just get db_inex=True internally
- fwiles
- gargoyle-grin: yup, just double checked (specifically for db_index on a field) and it gets created
- gargoyle-grin
- Alex_Gaynor_: I hadn't tried sqlall, but I did just now, and it still doesn't seem to do anything special with the field I added db_index to. It's a PositiveIntegerField.
- gargoyle-grin
- fwiles: Oy. Ok. I'm probably losing my mind somehow.
- gargoyle-grin
- Alex_Gaynor_, fwiles: Ah. Ok. I think I see what's up. Thanks so much for your input. :)
- maraujop
- What would you say is the best way to promote a new Django-app in the Django community not being a known developer in it?
- Alex_Gaynor_
- maraujop: Write a blog post on it (and have your blog be in the community aggregator), let us know at DjangoDose
- maraujop
- Alex_Gaynor_: Great! English right?
- fwiles
- maraujop: Blog post as Alex says, and then places like reddit.com/r/django
- maraujop
- fwiles: Thanks!
- fwiles
- maraujop: yeah it being in English would likely get the word out to more people
- Alex_Gaynor_
- maraujop: English will probably appeal to the most people, you could try your native language community as well
- jacobkm
- maraujop: also, be sure your app hits all the main requirements to be a "good citizen": have documentation, tests, a README, and be on PyPI (and be sure that pip/easy_install yourapp works).
- maraujop
- Alex_Gaynor_ : So I can do both? right?
- Alex_Gaynor_
- maraujop: sure
- maraujop
- Alex_Gaynor_, fwiles: Thanks for the answers
- robhudson
- How many more revsys-type companies do you think could exist based on your workload? Also, how do you see the Django job market looking these days in general?
- quantumsummers|a
- I like robhudson's question.
- Alex_Gaynor_
- robhudson: I'm not an expert in what exactly revsys does, but there are several other consultancy/whatevers that specialize in Django work.
- jacobkm
- robhudson: I don't know how to answer the first part of your question -- fwiles? -- but to answer the second one: the job market is *totally* a seeker's market right now. If you know Django, and you don't like your job, I can almost guarentee you'll at least get a couple-three interviews at better places.
- ipmb
- robhudson: I know of companies hiring guys off the street with no Django/Python experience due to the lack of skilled folks available right now
- fwiles
- robhudson: It's difficult to tell, but I would assume we could use at least 2 more revsys/lincoln loop/eldarion/caktus type companies at this point. Or for one of us to grow larger than we are
- fwiles
- robhudson: it really depends on the growth of Django. We'll all staff up based on that really.
- quantumsummers|a
- jacobkm: how's that for independent contractors, w.r.t. robhudson's question?
- Alex_Gaynor_
- quantumsummers|a: At Eldarion we've been hiring like mad recently, so there's plenty of work to be done
- jacobkm
- quantumsummers|a: ditto for contractors. Actually, if anyone here's a contractor and looking for work... erm, stay late and talk to use after class :)
- jacobkm
- talk to *us*.
- quantumsummers|a
- Hey hey, count us in
- coderanger
- How do I cleanly handle multi-server rollouts using Chef?
- coderanger
- (not having servers throwing errors because they see the wrong DB schema)
- jacobkm
- coderanger: hm, I'm not sure I follow -- why would chef be complaining about a DB schema?
- jacobkm
- coderanger: oh, are you using chef's deploy resource?
- coderanger
- jacobkm: No, I built my own resource setup, but theirs doesn't seem to handle it very well either
- coderanger
- jacobkm: The problem is there is no way to force two servers to upgrade in lockstep
- coderanger
- So at one point one or the other will be out of sync
- jacobkm
- coderanger: yeah, I came to that conclusion after an hour of trying to convince Chef that really no I'm not running Rails.
- jacobkm
- coderanger: ah yes.
- jacobkm
- Yeah, that's a common problem -- it's by no means Chef-specific.
- coderanger
- Notably web server vs. db server this causes tons of errors
- jacobkm
- coderanger: yup.
- coderanger
- jacobkm: Yeah, but with an imperitive system like fabric you can globally enable downtime mode first
- jacobkm
- coderanger: I unfortunately don't have a good answer: I've always just taken momentary downtime :(
- coderanger
- jacobkm: My best solution so far is to store both a downtime and version flag in the DB (in a table we assume will never change) and have the server block requests if either the downtime flag is set or the version doesn't match
- coderanger
- jacobkm: Thats a non-trivial DB load though
- jacobkm
- coderanger: so I've usually just thrown up a downtime page, done the migration, and taken it down. Any good load balancer should be able to do that pretty easily (I know how to do it with nginx and maybe Apache). But yeah, it's really far from ideal, and I'd love to figure out a better way.
- coderanger
- jacobkm: Just doing that outside of Chef you mean?
- andrewgodwin
- haproxy has good downtime-error-page handling support for those interested
- fwiles
- coderanger: if your data is mostly read heavy, one option I've seen people do is copy the database so you end up with say 'production_new' and 'production_old'. You get your databases set and as the code is upgraded you switch DBs.
- fwiles
- coderanger: you usually want to build in a 'turn the system into read only mode' type flag during that transition obviously
- jacobkm
- coderanger: I tend to use Fabric for deployment-type stuff (anything imperative basically), but I don't see why you couldn't use Chef.
- unbracketed
- These guys have a solution that is still early in development i think: http://chronicdb.com/why_live_database_updates
- unbracketed
- i've spoken with them a bit and they're eager to partner with people in the django community who could use solutions like this (ChronicDB)
- coderanger
- jacobkm: The problem with using Chef for it is that there is no global time sync, each client just wakes up and starts running the new config :-/
- jacobkm
- coderanger: ah, I also don't use chef server. Just chef-solo, kicked off by fabric.
- coderanger
- jacobkm: Ahh, that would help. You don't get databags though.
- coderanger
- andrewgodwin: Chef has its own bootstraping system as long as the server has ssh setup ;-) (re: twitter)
- jacobkm
- coderanger: really? is that documented anywhere?
- andrewgodwin
- coderanger: yes, but this is re:the heroku-alike
- coderanger
- andrewgodwin: Ahh
- andrewgodwin
- I can't just hg push to my server to have it deploy. yet.
- fwiles
- andrewgodwin: any plans to support git?
- coderanger
- jacobkm: http://wiki.opscode.com/display/chef/Knife+Bootstrap
- andrewgodwin
- fwiles: git support's actually the only proper working one
- andrewgodwin
- hg support is still slightly dodgy
- fwiles
- andrewgodwin: ah cool
- jacobkm
- coderanger: neat, thanks.
- andrewgodwin
- don't worry though, we'll be recommending svn
- ipmb
- :)
- coderanger
- jacobkm: I also have a debian preseed file that sets up new VMs against the chef server automatically, /me finds
- coderanger
- jacobkm: https://gist.github.com/664608
- dartdog
- earlier there was some discussion of how to migrate an app without taking it down...Think this covers a very good approach, while example is app-engine approach universal http://codebetter.com/blogs/kyle.baley/archive/2010/09/28/options-for-upgrading-an-app-engine-application.aspx
- coderanger
- dartdog: I'll take a look, thanky
- nicoechaniz
- Alex_Gaynor_: are there any plans to implement a couchdb backend based on your work on NoSQL ?
- Alex_Gaynor_
- nicoechaniz: I don't have any plans ATM, but I am working to get the core stuff merged in, and the MongoDB example as an external project, which hopefully could be a good example for folks interested in CouchDB
- quantumsummers|a
- Alex_Gaynor_: mongo ++1
- nicoechaniz
- Alex_Gaynor_: there was this guy: http://github.com/42/42-django-couchdb who made a couchdb backend, maybe it could be adapted to your work
- silent1mezzo
- What suggestions do you have for a django dev to start helping out with django core development.
- silent1mezzo
- IE, I've been working on django apps for the past year and I want to get into fixing bugs and stuff
- jacobkm
- silent1mezzo: yayhooray!
- Alex_Gaynor_
- silent1mezzo: a) We totally love more contributors! b) Take a look at our bug tracker, we've started to mark things with `easy-pickings` keywords, but in general find a component of Django you think you know well (e.g. I use forms a lot) then find bugs/features filed against it.
- jacobkm
- silent1mezzo: my best suggestion is to read the mailing list (django-dev), hang out in #django-dev here on IRC, and when something comes up you know a bit about try to pitch in. Just be bold and remember that if someone criticizes your code it's not because they don't like *you*, it's because they're trying to make sure that only awesome code goes into Django.
- silent1mezzo
- fair enough, ya I wanted to help out more when my first patch was accepted...
- ericholscher
- silent1mezzo: http://groups.google.com/group/django-developers/browse_thread/thread/97cbdee3954a8f8d/5bd6077c5a9d1149?lnk has some good answers
- silent1mezzo
- ericholscher: thanks
- amjoconn
- Beyond NFS are there any new and interesting ways to locally (ie not Amazon EC2) share media between app servers?
- fwiles
- amjoconn: rsync'ing often is the easy way to do it, but assumes you don't change media often
- fwiles
- amjoconn: another option would be to build your own file backend that ensured things were synced
- jacobkm
- adamend: http://www.danga.com/mogilefs/ is another option you should take a look at. Really, though, I strongly recommend S3: it's hard to beat.
- amjoconn
- fwiles: I am doing quite a bit up uploading, processing, and re-serving. It isn't just static media, and truly syncing with rsync sound error prone...
- fwiles
- amjoconn: it's not really error prone, but does introduce a lag between the systems
- fwiles
- amjoconn: something like mogilefs, a custom backend, a celery task on saves to replicate, or another clustered file system are your best non-CDN options
- fwiles
- amjoconn: but honestly I haven't had a ton of luck with clustered file systems in the past, but I haven't played with any of them in a couple of years
- amjoconn
- fwiles: Yeah I guess you could rsync to one central system and then back out to the app servers to prevent contention... there would still be contention actually over names.
- quantumsummers|a
- amjoconn: there is the mongo grid fs that looks very interesting
- jacobkm
- amjoconn: so why are you *not* wanting to use S3, if I may ask?
- fwiles
- amjoconn: well if it's your media you can solve the name issue by using UUIDs for the names instead of what the user provides
- quantumsummers|a
- we have been looking at it to replace bugzilla attachment storage in gentoo
- amjoconn
- fwiles: Yeah I am looking for some kind of S3 like backend I could host locally, even if it means writing a custom backend.
- amjoconn
- I will look into those options
- quantumsummers|a
- eucalyptus provides an aws s3 compatible storage layer
- amjoconn
- jacobkm: Good question. Canadian privacy laws? It is an application system, so there is a real private data we don't want to sound out to Amazon.
- quantumsummers|a
- then, of course, there is drbd
- amjoconn
- Have people had success with eucalyptus in practice?
- fwiles
- amjoconn: you can encrypt the data to keep it safe on S3
- robhudson
- I remember getting "bored" with building website with PHP. Do you ever get bored with building Django sites?
- robhudson
- If so, what things are you not bored with at the moment. If not, why do you think that is and how long until you might get bored?
- Alex_Gaynor_
- robhudson: I'm not jacobkm, but yeah, I get bored just building websites some times. Personally the fun stuff for me is under the covers, profiling and optimizing internals, fixing JOIN promotion bugs, etc. It's not Django's fault, other than it means I don't have to care about that stuff when I don't want to.
- robhudson
- Alex_Gaynor_: agreed, seems like there's lots of specialization to keep it interesting.
- jacobkm
- robhudson: I actually do surprisingly little website-building these days -- lots of training, consulting, bug-tracking-down, code reviewing, etc. I actually sorta miss just building a website :)
- jacobkm
- Oh deploying and ops. Lots and lots and lots of that.
- jacobkm
- Not board with *that* just yet -- it's kinda endlessly fascinating.
- coderanger
- What are your thoughts on the various Postgres ecosystem tools (pgpool, slony, etc)?
- fwiles
- coderanger: pgpool is ok, but pg_bouncer is the new hotness
- jacobkm
- coderanger: I've had some really annoying problems with pgppol and have switched to bouncer.
- jacobkm
- If pgpool loses the connection to the backend, even for a moment, it requires a hard-restart to reconnect. That's *terrible* in a cloud-ish environment where you don't have control over network routing. Rackspace, for example, occasionally drops a packet or two across the (fake) internal network, and that causes pgpool to freak out.
- fwiles
- coderanger: one tool everyone should get familiar with is pgfouine (http://pgfouine.projects.postgresql.org/)
- coderanger googles
- quantumsummers|a
- http://wiki.postgresql.org/wiki/PgBouncer << looks nice
- fwiles
- coderanger: with Pg 9.0, you don't need the other replication schemes obviously
- coderanger
- fwiles: Has anyone packaged it for Ubuntu 10.04 yet? Trying to stick to LTS
- fwiles
- coderanger: I don't know of a 10.04 package, I've been playing with a source version on my laptop
- coderanger
- fwiles: Is it better enough to be worth the jump? Not that it would be that hard to be better than slony >_<
- fwiles
- coderanger: yeah replication is now as easy as MySQL's
- fwiles
- coderanger: http://www.piware.de/2010/09/postgresql-9-0-final-released/ also
- coderanger
- jacobkm: Yeah, small stuff I don't mind making my own packages, but something the scale of postgres seemed more ambitious to maintain
- jacobkm
- coderanger: https://launchpad.net/~pitti/+archive/postgresql -- pg9 PPA.
- jacobkm
- coderanger: looks like it'll go into lucid-backports, but that'll take some time to happen.
- coderanger
- Ooh, shiny :)
- fwiles
- coderanger: other than that, not a ton of features that would probably be on interest
- ericholscher
- What is the stack that you all are recommending/using these days? (wsgi/frontend/load balancing/data-mulleting)?
- jacobkm
- ericholscher: it depends a bit, so I'll answer twice:
- jacobkm
- ericholscher: the "safe" stack, which we usually recommend, is nginx, Apache, mod_wsgi, and PostgreSQL.
- jacobkm
- All of those are proven, battle-tested, and we're very happy with them and know how they'll perform and scale.
- jacobkm
- ericholscher: the "living on the edge" stack is nginx, gunicorn, and usually some combination of celery, rabbitmq, redis, and postgres. This stuff can be faster, but the downsides are still sorta unknown at the time.
- maraujop
- jacobkm: What about Cherokee?
- jacobkm
- maraujop: I'm just not familiar with it and I have a gut reaction against anything that does through-the-web configuration. I like my config files, thanks.
- ipmb
- you guys connect gunicorn/nginx via TCP or unix sockets?
- jacobkm
- ipmb: TCP: speaking HTTP is a feature.
- fwiles
- ipmb: unix sockets would be fastest, but I honestly don't know what we typically roll out there as Jacob's done the most with gunicorn
- jacobkm
- unix sockets don't work beyond one server, and even for the smallest deployments I like to have at least two.
- maraujop
- jacobkm: Ok, Cherokee web configuration is considered a killer feature. Benchmarks say it's fast and code is clean and good quality, it's getting more common here in Spain as a choice
- coderanger
- jacobkm: Have you guys played with the async workers in gunicorn at all?
- prestontimmons
- Do you guys have to mess with RHEL much?
- prestontimmons
- If so, do you keep the old system packages of Python and Postgres or custom compile newer versions?
- fwiles
- prestontimmons: Not a ton of RHEL anymore, most people are running Ubuntu these days. It depends on the client and app, but I *never* let a package manager or "long term support" aspects get in the way of getting the job done.
- fwiles
- prestontimmons: so if I need PostgreSQL 9.0 or python 2.6, I'll attempt to use packages if available or just roll muy own
- fwiles
- prestontimmons: especially for things so core to the system like Python and PostgreSQL. For example, don't really care what version of Apache it is as long as it's patched well
- zain
- Are y'all happy with rabbitmq? have you tried redis as an mq?
- fwiles
- zain: I actually push redis first and only do rabbit if necessary
- coderanger
- zain: Its been pretty good so far, the ghettoq backend still needs key prefix support though
- prestontimmons
- What are the main upsides to gunicorn vs mod_wsgi and Apache?
- jacobkm
- prestontimmons: gunicorn will consume less RAM overall, and probably handles higher concurrency better.
- fwiles
- prestontimmons: memory size really. If you're not using any of the features of Apache other than mod_wsgi, why eat up those resources?
- jacobkm
- maraujop, prestontimmons: The really awesome thing about Python right now is that pretty much everyone speaks WSGI perfectly now, so switching between different application servers is quite easy. It's entirely possible to give a few a try over the course of a day and see which one you like the best.
- maraujop
- jacobkm: Thanks Jacob, those are good news :)
- prestontimmons
- What are the typical memory savings you've seen?
- jacobkm
- prestontimmons: I'd guess in to 10-20% range, maybe?
- brian[r]
- With the nginx/gunicorn setup (something I've been using on my recent projects as well), do you use nginx proxy_cache as an upstream cache or memcached or something else?
- jacobkm
- brian[r]: I use nginx as a load balancer. If I need proper caching I'll bring in Varnish.
- fwiles
- brian[r]: I've done both, but Varnish is the "correct" answer there
- ipmb
- What are you guys watching gunicorn with, supervisord?
- jacobkm
- ipmb: on ubuntu I use upstart since it's built-in and there isn't anything else required.
- ipmb
- yep
- jacobkm
- ipmb: if I was on a different OS I'd probably use God or Monit.
- ipmb
- why those over supervisor?
- jacobkm
- But that's just because I've never learned supervisord -- I know ericholscher uses and likes it.
- fwiles has been meaning to play with supervisor also, just haven't had a chance yet
- jacobkm
- I really do like upstart, though -- it's just so simple. Here's an example: http://paste.pocoo.org/show/286618/
- ericholscher
- the annoying thing about supervisord is that you still need upstart or something to watch it, so i've been going towards upstart because of the simplicity and built-in-ness
- ipmb
- yeah, upstart is nice
- coderanger
- What do you guys use for system monitoring (mmonit, munin, nagios?)
- jacobkm
- coderanger: nagios & munin.
- coderanger
- Any reason for both?
- jacobkm
- I HATE nagios with a passion, but I've tried everything else and keep coming back.
- fwiles
- coderanger: and occasionally ZenOSS
- ipmb
- jacobkm: thoughts on zabbix?
- fwiles
- but ZenOSS is overkill for most web apps
- jacobkm
- coderanger: I've never gotten munin's alerting to work as reliably as Nagios.
- jacobkm
- Oh, I should give a plug for http://www.pagerduty.com/ -- it's a really nice addition to your monitoring, whatever it is.
- fwiles
- yeah pagerduty rocks
- dartdog
- Anyone played with "cloudflare" yet?
- dartdog
- http://www.cloudflare.com/, Thoughts?
- jacobkm
- dartdog: it sounds like snake oil to me. I looked at it and still can't understand how the heck it's supposed to work.
- fwiles
- dartdog: or what it does... landing page fail
- fwiles
- dartdog: is it a front end cache like how certain CDNs will watch your media server?
- dartdog
- From what I see it appears to be a smart front-end with caching and trafic filtering (prvenets therats)
- fwiles
- dartdog: yeah that's what I gathered. so it's basically 'hosted varnish' it seems
- dartdog
- I was hoping one of the smarter folks had given it a spin :-)
- dartdog
- if you look at its help page it says some stuff...
- robhudson
- Is there anything from other frameworks you wish Django had?
- Alex_Gaynor_
- robhudson: I want a pony... seriously paste has one, why don't we?
- fwiles
- robhudson: I'd like to see Jacob on the cover of Fortune ;)
- maraujop
- hahaha
- jacobkm
- robhudson: off the top of my head... Rails migrations still rock harder than anything Django or the community has to offer (sorry andrewgodwin :)
- jacobkm
- And yeah, I'd love to have a $100k sports car.
- fwiles
- robhudson: I miss some of the testing ease from Perl, but that's really a Python ecosystem issue and not specifically Django
- jacobkm
- fwiles: Word. We need TAP something aweful.
- fwiles
- jacobkm: yeah TAP and automatic test running on installs, how everything is always just "make/build test" everywhere... always
- quantumsummers|a
- use portage?
- quantumsummers|a
- auto test-running on install
- ericholscher wrote a pip test command, but ian said pip wasn't the correct place for it
- fwiles
- ericholscher: Then I disagree with Ian and will beat him up in January when I see him :)
- jacobkm
- What else? I like what Armin's doing with Flask extensions, though that's more of a workflow and community-management thing.
- coderanger
- djangopackages could use some more pimping, but it is a start
- fwiles
- It's not from "elsewhere" but I really like the GenericForeignKey ideas from Ericflo's talk at DjangoCon
- jezdez
- ericholscher: there will be one in distutils2, so you'll be able to run pysetup test whatever
- ericholscher
- jezdez: is pysetup going to be the "python command line interactive endpoint" kind of thing?
- coderanger
- Alternatively someone could just make a search engine for jezdez's watch list on github ;-)
- jacobkm
- I'm intrigued by the BFG/Pylons merge ("Pryamid") -- going to watch that closely.
- ericholscher
- seems like pip/fabric are the current ways of doing such things
- jezdez
- coderanger: :P
- jacobkm
- What Would Jezdez Use?
- Alex_Gaynor_
- coderanger: let's be honest, jezdez forks all code, shitty or good, just to add a setup.py
- maraujop
- hahaha
- Alex_Gaynor_
- (he also sometimes add a MANIFEST.in)
- jezdez
- ericholscher: yeah, pysetup (I hope I got the name right wrong that flamewar on python-dev) will be the caller for distutils.command.X
- ericholscher pays $20 to whoever makes the "jezdez forked my project and all I got was this setup.py" shirt
- jezdez
- err, distutils2.command.X
- fwiles
- ericholscher: LMAO
- Alex_Gaynor_
- ericholscher: I'd take that in hoodie form
- jezdez
- Alex_Gaynor_: pssst, don't tell everyone
- jacobkm
- I think an achievement badge would be better - "Forked by Jezdez"
- jezdez
- heh
- ericholscher
- didn't danny add achievements to djangopackages?
- ericholscher
- or badges or somesuch
- jezdez
- for the record, I've been unfollowing people on github over the last couple of days
- fwiles says, "Jezdez just checked in as the mayor of Github"
- coderanger
- Alex_Gaynor_: Exactly, as time tends toward infinity, the list includes every django app out there :-)
- fwiles
- ericholscher: if so, I want the 'has root' badge
- jezdez
- coderanger: trust me, there are more apps out there anyone could follow
- nicoechaniz
- Alex_Gaynor_: i've been bitten by jezdez forkin' ! I was looking for a Bulletin Board app, and lost a bunch of time trying to figure out why jezdez had chosen (forked) one in particular.... until I found out he had just touched one line :P
- jezdez
- nicoechaniz: you mean https://github.com/jezdez/Dinette?
- nicoechaniz
- jezdez: yeah I think so
- jezdez
- nicoechaniz: aye, just deleted it
- ericholscher
- Have you all done anything supporting websockets?
- ericholscher
- I've heard that nginx doesn't support websockets (as its only supports HTTP 1.0)
- jacobkm
- ericholscher: is that one of them thar new HTML5 things?
- jacobkm
- (No, I haven't)
- Alex_Gaynor_
- jacobkm: yup, it is
- fwiles
- yeah I haven't played with websockets
- fwiles
- (horrible name btw)
- quantumsummers|a
- re: websockets, nice site to keep up with things http://cometdaily.com/
- ericholscher
- quantumsummers|a: that site isn't webscale :)
- quantumsummers|a
- ericholscher: please explain?
- ericholscher
- quantumsummers|a: its timing out for me
- quantumsummers|a missed a meme?
- quantumsummers|a
- really, bum deal
- Alex_Gaynor_
- quantumsummers|a: oh you definitely missed a meme, you need web scale!
- quantumsummers|a
- apparently I do
- jmoiron
- ericholscher: wfm
- ericholscher
- hrm, odd
- jmoiron
- quantumsummers|a: http://www.xtranormal.com/watch/6995033/
- ipmb
- You guys have anybody asking you to do stuff on AppEngine?
- fwiles
- ipmb: actually no, never, not once... which really has surprised me
- fwiles
- ipmb: jacob just corrected me
- jacobkm
- Actually, we've got one client with a piece of their stack on AppEngine, but it mostly Just Works.
- ipmb curious how this SQL thing plays out there
- jacobkm
- ipmb: AFAIK it's just Google's fork of MySQL, with all the good and the bad that entails.
- maraujop
- What are you guys using for social logins and authentication without reinventing the wheel?
- coderanger
- maraujop: So far I haven't found anything that supports Everything (which for us include Live), but velruse is close
- fwiles
- maraujop: it really depends on the client. I've got a couple of small apps that use Twitter and Facebook logins, but honestly they haven't been used much so I'm not comfortable recommending a particular app for it
- coderanger
- maraujop: Janrain is also awesome if you can afford it
- jacobkm
- maraujop: ditto coderanger -- I've been happy with Janrain when I've used it.
- jacobkm
- django-socialregistration is the DIY system (https://github.com/flashingpumpkin/django-socialregistration). It's good, but it's not all that well documented and it has some dark cornerns.
- jacobkm
- corners.
- maraujop
- jacobkm: django-socialauth documentation gets me lost and I don't get it to work, is a total nightmare
- maraujop
- django-socialregistration is missing good pieces of documentation in my opinion
- maraujop
- as I'm far from being an expert in this field I don't rely on me to fill the gaps
- jacobkm
- maraujop: yes, it is, but if you're willing to read the source it's pretty easy to follow.
- maraujop
- coderanger: I will look at it, thanks
- maraujop
- thanks for your answers guys, you rock
- maraujop
- jacobkm: If you believe so, I will look at it, see if I can write some docs on it
- jacobkm
- maraujop: awesome. I'm going to be teaching a class on it (and other things) so I'll be releasing any docs I write as part of that, too.
- maraujop
- jacobkm: Where is that class going to be? any possibility of online mode?
- jacobkm
- maraujop: Boston and Los Angeles this time 'round (see http://revsys.eventbrite.com/). I'm a bit... suspicious of online classes, butI *might* give it a try at some point in the future.
- maraujop
- jacobkm: It's out of my budget, sorry, I wish I could go overseas to listen some good talks
- coderanger
- You should come do sessions in SF :-)
- coderanger
- Then there is at least a chance I could get Atari to pay for it (though they are still hemming and hawing about pycon)
- fwiles
- coderanger: oh he'll end up doing a class in SF eventually
- jacobkm
- Yeah, I want to do SF but I need more leadtime for venues and such.
- silent1mezzo
- and sessions in Toronto :P
- fwiles
- silent1mezzo: you know I don't think we've considered Toronto before, but it should probably be on our list
- silent1mezzo
- fwiles: I know of a bunhc of people that would come
- amjoconn
- I would come to something in Toronto as well
- silent1mezzo
- there'd be at least 5 from my office and I could think of 20 more that'd be there (personally), I'm sure you'd hit way more
- fwiles
- silent1mezzo: we'll definitely consider it in the spring probably
- silent1mezzo
- fwiles: sweet
- amjoconn
- awesome
- fwiles
- Jacob also just came up with a cool idea to do a kickstartr like class, "Ok going to do a class in March in one of these 5-7 cities. The first one with X signups wins!"
- silent1mezzo
- Good idea
- coderanger
- Do you guys have any experience in using Django in a PCI-compliant app?
- fwiles
- coderanger: yeah one of my projects storymarket.com is PCI compliant
- fwiles
- coderanger: however we're using a off site processor, so we don't "store" CC info, just pass it along the first time and get a unique ID associated to the card to use from there on
- coderanger
- fwiles: Anything in particular that was a problem? The hardest thing I've found so far is making encrypted fields not suck
- fwiles
- coderanger: you don't want to store credit card data... just don't... it's not worth it use something like Braintree to hold the info for you. You can literally spend $50k getting an app PCI compliant and then still run the risk if you make a small mistake of HUGE fines
- coderanger
- fwiles: Ahh, storing PANs invites so much burnination
- fwiles
- coderanger: buninnation as in vendor lock?
- coderanger
- fwiles: For doing cyclic billing (subscriptions) not storing CC data is even worse
- coderanger
- We are currently using Vindicia and LiveGamer
- quantumsummers|a
- coderanger: we are successfully using the payjunction trinity api within a django powered site-plex
- fwiles
- coderanger: you're not following me. We don't store the CC data, but we're given essentially a UUID we store and can then re-use to do subsequent transactions against the CC via the processor. Removes 90% of the PCI compliance issues
- ipmb
- fwiles: authorize.net?
- fwiles
- ipmb: no, I don't believe authorize.net has that feature
- fwiles
- ipmb: but I could be wrong, been a long time since I've used them
- coderanger
- fwiles: Yeah, that is what we do now, mgmt wants to switch to storing CC data ourselves to reduce the number of snufus in subscription billing
- ipmb
- fwiles: http://www.authorize.net/solutions/merchantsolutions/merchantservices/cim/
- fwiles
- coderanger: well my suggestion would be to do your "billing" via a system that isn't online
- fwiles
- coderanger: i.e. behind a firewall and have it just pull data off your web nodes to some place safer
- quantumsummers|a
- sox+pci makes for mucho expenses
- quantumsummers|a
- and liability
- fwiles
- ipmb: yeah that's the same idea there
- coderanger
- fwiles: Yeah, the current plan is to have the billing app only enabled on specific web servers that don't answer public reqs
- fwiles
- coderanger: I'd go farther than that and make that box inaccessible from the public internet entirely
- coderanger
- fwiles: Yeah, it would be an internal RPC-based server
- jmoiron
- jacobkm: Do you think there are any ways to reduce the friction there is in using 'pluggable' django apps?
- jmoiron
- maybe standard management command hooks for pastescript style config installation, media settings; or is this solved/not a problem/not django's problem
- jacobkm
- jmoiron: I'm not all that familiar with pastescript. But 1.3 will ship with django-staticfiles as django.contrib.staticfiles so with luck that'll help with the media issue.
- jacobkm
- jmoiron: (http://docs.djangoproject.com/en/dev/howto/static-files/)
- jmoiron
- jacobkm: ah, that's neat
- ipmb
- In your classes, what do you find people struggle with the most?
- fwiles
- ipmb: Jacob's so awesome the only issue they have is getting to the right city! :)
- jacobkm
- ha
- jacobkm
- ipmb: depends on the kind of class - beginners struggle a lot with packaging and PYTHONPATH, though these days pip/virtualenv *tends* to help make that easier.
- jacobkm
- ipmb: at the intermediate/advanced level the biggest problems tends to be that up until that point people have treated Django as a black box and don't have any idea how it works or what goes on internally.
- jacobkm
- ipmb: but at a certain point everyone needs to stop depending on Django as a monolothic and start replacing the bits that aren't working, and that usually means reading the code and poking at internally bits, and they find that hard.
- ipmb
- wrt pythonpath/packaging are they coming in with a background in other systems that work better?
- jacobkm
- ipmb: people coming from Ruby or Perl usually don't have issues, but people from the Java or MS worlds *really* do -- they're used to something like Eclipse basically hiding the filesystem from them.
- jacobkm
- I usually have a few students who want to use PyDev or something, and I force them into a text editor and a terminal.
- coderanger
- Which do you generally use of pip+venv or buildout these days?
- fwiles
- coderanger: mostly pip+virtualenv these days. Still have a few legacy projects using buildout
- fwiles
- coderanger: IMHO buildout is perfectly fine, but virtualenv-wrapper makes switching between projects (which I'm sure you can imagine we do often each day) much easier
- jacobkm
- I still *love* buildout, but the lack of documentation means I don't recommend other people use it.
- coderanger
- It seems like buildout has stagnated recently, probably would have to switch off of it though :-/
- carljm
- coderanger: it had a new release not that long ago?
- jmoiron
- judging by the number of "how to install X with virtualenv and blah" blogposts i'd say people are still a bit mystified by it
- ipmb
- I *really* like pip, but we get bitten by bugs in it still (mostly around editable checkouts)
- jmoiron
- ipmb: and 'import ez_zetup'
- coderanger
- carljm: It feels like all the recent releases were only to fix specific problems the Zope team had
- carljm
- ipmb: as someone who spends a lot of time with pip's codebase, I don't recommend editable checkouts for anything but local playing around. they are quite buggy; it's a hard problem, with all the differences between VCSes.
- ipmb
- yeah, carljm we got bitten by this recently http://bitbucket.org/ianb/pip/issue/32/installing-from-a-git-repo-using-e-doesnt-checkout-the-default-master
- ipmb
- works in pip 0.7.2 but not after
- carljm
- yes, the git backend specifically has been a nightmare.
- unbracketed
- carljm: i totally agree although in practice it is often convenient during build cycles to be able to point to branches and use that flexibility. as someone who has been burned by the bugginess i definitely advise having a plan B
- jezdez
- ipmb: been looking at unbracketed's comment, which patch is he refering to?
- jezdez
- oh, he's here :)
- jezdez
- hi unbracketed
- unbracketed
- hi
- unbracketed
- IIRC changing the incantation of the git-pull line was all that was needed to get it working
- jezdez
- unbracketed: ipmb: hugo and me wanted to sprint on the git backend this weekend
- ipmb
- jezdez: root problem, editable git checkout on a branch works the first time, fails when updated
- jezdez
- ipmb: yeah, had that, too. doing horrible things to work around it
- jezdez
- ipmb: turns out testing that git backend is nasty, since git behaves differently between versions
- fwiles
- jezdez: bah, everyone one runs the latest anyway right? ;)
- jezdez
- ipmb: plus, there is this whole "shoehorn version info in a url" thing
- jezdez
- fwiles: (or sets up a different repo just to put a branch in that repo, yuck)
- ipmb
- jezdez: yeah, I can imagine it sucks
- jezdez
- ipmb: if you want to do the python world a favor, reimplement pip on top of anyvcs, argparse and distutils2
- unbracketed
- jezdez: IIRC the patch on this ticket got it working (with whatever version of git they were running) http://bitbucket.org/ianb/pip/issue/161/cant-git-pull-from-some-repositories
- ericholscher
- jezdez: does anyvcs work well?
- jmoiron
- what's pip using for args, custom stuff?
- jezdez
- jmoiron: optparse and custom classes
- jezdez
- ericholscher: err, sorry, I meant anyvc
- jezdez
- yeah, seems neat, not complete yet
- carljm
- coderanger: fwiw, we have good success when we need to patch dependencies using an internal chishop, so it's just a matter of having our own git branch / mercurial queue with a suffixed version in setup.py (something like "1.2.mycompany.1") and then running "python setup.py sdist upload -r local"
- jezdez
- but ronny is pretty eager
- ericholscher
- jezdez: i've bitched about the lack of something like that existing publically a couple times, so i should probably help :)
- coderanger
- carljm: Thats what I have now, along with a patched djangorecipe to use it
- jezdez
- ericholscher: yeah, I hear yah, it's the big pain of version control. big props to empty for his gitpython efforts
- carljm
- coderanger: ah. i don't have to patch djangorecipe, pip reqs files support extra index urls natively :-)
- jezdez
- :D
- coderanger
- carljm: Buildout itself supports it, but for some reason djangorecipe doesn't use the normal buildout install mechanisms
- dartdog
- Is it reasonable/possible to use django trunk for production anymore, seems like not?
- jacobkm
- dartdog: yes.
- jacobkm
- dartdog: but it's not for the weak-at-heart or conservative :)
- dartdog
- gotch
- jacobkm
- dartdog: you have to read each commit and pay attention, and you need test coverage (of your app) but in general yes, I still deploy some sites off trunk at times.
- fwiles
- dartdog: I've done it also, but tend to pin myself to a specific point in time on trunk and only move forward when necessary
- jacobkm
- I make a point of deploying from trunk for small personal projects or for green-fields development. The former because I can, and the later because usually by the time I'm done the next release is about to drop anyway.
- fwiles
- dartdog: rather than blindly following it constantly
- ipmb
- How do you guys handle packages once a site is in production?
- ipmb
- Self-hosted PyPi?
- jacobkm
- ipmb: nah, niow that pypi's got mirrors downtime really isn't much of an issue.
- fwiles
- ipmb: or do you mean for the production app code itself?
- jacobkm
- ipmb: I on;ly do an internal pypi if there's firewall or IP governance issues to use.
- ipmb
- what about internal code?
- fwiles
- ipmb: naw, that's usually overkill. A SCM checkout/export is fine
- ipmb
- or stuff you might have pulled of github or something
- fwiles
- ipmb: stuff off github we pin to a checkout
- fwiles
- ipmb: er I mean commit
- jacobkm
- The one project I worked on with lots of packages that did need to be wrapped up, released, and managed interally I did use an internal pypi (djangopypi). But fwiles is right that it's overkill for most projects.
- coderanger
- How do you handle patching existing projects?
- coderanger
- (at various times we have had custom builds of things like celery, django, etc)
- jacobkm
- coderanger: I try really really really really really hard not to.
- jacobkm
- coderanger: then I monkeypatch if at all possible.
- jacobkm
- coderanger: then, if that fails, I use mercurial queues.
- carljm
- jacobkm: how do you actually deploy the patched code? make your own sdist and host it somewhere?
- jacobkm
- But I've only done that twice and regretted it each time.
- coderanger
- jacobkm: I mean for hosting/deployment
- fwiles
- coderanger: in a few cases, where the project doesn't move much or the only issue I have (or feature I need) is something small I have in the past just "forked" it and pulled it into my app repository directly
- jacobkm
- coderanger: yes, deploy the patched code, either from a repo or an sdist.
- fwiles
- coderanger: but I don't really recommend that
- jacobkm
- A monkeypatch (plus a pinned version of the dependecy) is almost always possible. It's not pretty, but it's usually preferable.
- jacobkm
- coderanger: for example, you can monkeypatch Django *really* early on by putting the monkeying in the .wsgi file (if you're using modwsgi). There's almost nothing you couldn't do there.
- jacobkm
- But even that's a bad idea usually -- I really resist any sort of patching, monkey or otherwise.
- coderanger
- jacobkm: The custom Django is for changes to the ORM :-/
- coderanger
- jacobkm: http://code.djangoproject.com/ticket/10154
- jacobkm
- coderanger: I obviously don't know exactly what you're doing, but I'd argue whatever it is just isn't worth it.
- jmoiron
- monkeypatching the orm can get pretty hairy
- unbracketed
- jezdez: sry the "patch" was maybe on another ticket
- coderanger
- jacobkm: That plus support for dateutil for F('ts')+relativedelta(months=1)
- jacobkm
- coderanger: http://django.me/raw
- jacobkm
- I'd write a thousand lines of SQL before I patched a dependency.
- coderanger
- jacobkm: The query has to be different for each backend
- fwiles
- coderanger: yeah I'm with jacobkm there, just drop to raw
- jacobkm
- coderanger: if connection.backend == ...
- jacobkm
- coderanger: I'm not trying to convince *you* to change, just explaining what *I* would do in that situation.
- coderanger
- jacobkm: Yeah, I think I'll go back and retry doing it via raws :-)
- fwiles
- coderanger: I see that like buying a new car because the cup holders don't fit your favorite mug. Personally, I'd just hold it between my legs :)
- coderanger
- jacobkm: And then poke Gaynor in the shoulder until he figures out a better way to fix the patch on the ticket
- jacobkm
- coderanger: sounds like a good plan :)
- coderanger
- jacobkm: The ORM has been the first part of the Django code that I have just not been able to navigate well
- jacobkm
- coderanger: yeah, the ORM's hairy. No argument there :)
- fwiles
- all ORMs are hairy
- jacobkm
- Storm's internals are, surprisingly, really nice.
- jacobkm
- But it also doesn't try to do very much -- it's deliberately a thin layer.
- fwiles
- jacobkm: not familiar with Storm
- jacobkm
- fwiles: https://storm.canonical.com/
- ipmb
- How many other people make up RevSys at any given time?
- fwiles
- ipmb: we've got a little pony in the window
- ipmb
- :) no outside contractors?
- jacobkm
- Nah, we have a whole army of child laborers.
- jacobkm
- Oops.
- fwiles
- jacobkm: dammit don't you remember the lawyers said not to mention that!
- fwiles
- ipmb: we do use several outside contractors, usually notable Django peoples
- jacobkm
- It seems like at any given time we have a couple-three subcontractors working on *something*.
- fwiles
- ipmb: for example we've had PyDanny, Malcolm, Daniel Lindsley, and Alex Krikitos do work for us in the past
- fwiles
- ipmb: and I'm probably forgetting a few
- ipmb
- How's your workload spread out these days?
- ipmb
- That is how much is deployment vs. consulting vs. dev vs. training?
- jacobkm
- ipmb: for me, I'd so 50% deployment, 25% consulting, 15% dev, 5% training.
- jacobkm
- I'd *say*. Grrr.
- coderanger doesn't feel so bad spending so much time on deployment all of a sudden :)
- ipmb
- hands shaky from the chainsaw this morning? ;)
- jacobkm
- Depending on the time of year - winters are slow for work, so I'm doing more training.
- jacobkm
- ipmb: dude, seriously.
- fwiles
- ipmb: yeah roughly jacob's answer. I've been about 50-75% dev for the last few months on a large project, but that's an anomaly
- ipmb
- fwiles: still doing any perl work?
- fwiles
- ipmb: only when forced to :)
- fwiles
- ipmb: legacy projects I did for people, friends in a jam, that sort of thing, but in general no. I'm all 100% Python these days
- fwiles
- ipmb: well I take that back, I have perl "consulting/mentoring" work I do for a former employer here in Lawrence. But it's all consulting, no code really.
- coderanger
- Which cloud provider do you guys use the most these days?
- fwiles
- coderanger: Rackspace Cloud
- jacobkm
- Yeah, I'm enjoying Rackpace for the most part.
- fwiles
- They have a few blips, a bit more often than AWS, but I'm sure those will calm down over the coming months
- jacobkm
- AWS has closed the pricing gap, though, so some of the extra features might pull me back.
- coderanger
- Any plans to do more of these in the future?
- jacobkm
- Hell yeah. This was fun.
- mmarano
- fwiles: jacobkm: thanks for hosting a great conversation
- unbracketed
- thanks for all the insight and info guys
- quantumsummers|a
- thanks! nice session. I'd love to see another. Cheers
- quantumsummers|a
- fwiles, jacobkm ^^
- unbracketed
- have a great weekend everyone
- amjoconn
- thanks!
- jacobkm
- Thanks for all the great questions, folks!
- coderanger
- jacobkm: If/when I come up with a better way to handle chef-ized DB upgrades I'll be sure to let you know :-)
- fwiles
- yeah thanks everyone!
- jacobkm
- coderanger: seriously. We should sit down at PyCon and compare notes.
- ipmb
- thx guys, great idea!
- coderanger
- Thanks everyone :-)
- skyl
- okay, I'm all caught up now; where are we? oh .. done :-)
- brian[r]
- great chat everyone. thanks!
- skyl
- interesting read though, toodles!
- quantumsummers|a
- hope everyone has a pleasant weekend.
- skyl
- see y'all next time!