Last night I released the second beta of Adjector, our fast, flexible, open source ad client. There's a couple of small but important fixes: precaching now works correctly (I don't know how it even worked before), and rendering is a bit more stable.
There shouldn't be any trouble updating, no db changes occurred.
Well, it turns out that I don't know how to use SQLAlchemy correctly :) which is the reason for this second beta release. We had a couple of problems with precaching, where old cache objects weren't getting deleted correctly, and the precacher was being run for every group on every change. It turns out you can't do:
1query.filter(object.value in [item1,item2,...])
It hadn't erred, so I just forgot about it completely without looking up the right way to do things. In case you're curious, the right way is:
The worst thing is, doing it wrong apparently resulted in other things being done to the database... certain cache objects were being set as text, or as not text, when they shouldn't have been. Definitely weird.
I also fixed a bit of a bug with the renderer: this problem you should never see if everything is working correctly, but there is a possible case where when you are looking for multiple text creatives, an appropriate creative might never be found. It now will no longer error or cycle forever looking, but just give up after a few (1000) tries.