Async race conditions (Django, RQ)

Solving the case of the missing objects

September 30, 2015

tl;dr Beware of race conditions when using async queues and accessing data which may not have been committed on the main process.

Whenever we have to update an external system (pushing out data to out CRM system, notifications to HipChat, sending emails, that sort of thing) we send the data asynchronously by queueing up a function with . . .

Read More

Django, Whitenoise, and Heroku

September 16, 2015

tl;dr Heroku’s filesystem is ephemeral, so be careful when running the collectstatic command - it doesn’t necessarily do what you think it does..

Our current production asset delivery setup looks like this:

  1. Run grunt locally to generate static files
  2. Commit changes to repo
  3. Push to Heroku
  4. Run collectstatic to push staticfiles to S3
  5. Configure . . .

Read More

Generating MoM, YoY and CMGR from SQL

Does anyone round here know SQL any more?

August 25, 2015

We recently hired someone to help us with some data analysis and reporting requirements. We're not really big enough to claim that what we needed was a Data Scientist, but that is effectively what we were looking for. And as is our wont, we created a simple test for applicants, designed to show some ability to extract meaning from data . . .

Read More

Continuous delivery at YunoJuno

BitBucket to Codeship to Heroku

June 22, 2015

Disclaimer: I'm a Continuous Deployment sceptic. I've always been suspicious of people who automatically deploy code to their live environment, and still am. Seems risky to me. See this article for more details on the difference between continuous delivery and deployment.

I've blogged before about our deployment tools, which . . .

Read More

Custom deployments with Codeship

Deploy to a specific Heroku environment based on committer with a custom script

June 18, 2015

(tl;dr this is a precursor of a longer post on continuous deployment at YunoJuno, and deals specifically with custom Codeship deployments.)

In addition to hosting our dev, uat (staging) and live environments on Heroku, we now have separate Heroku environments (apps) for each developer on the team. We used to allow developers to push their . . .

Read More

Trifecta, part 3: the app

Putting it all together with virtualenv (and foreman)

June 16, 2015

(This is the final (possibly) article in a series of four, and follows on from Docker services. Code from this series of articles is available on Github as yunojuno/trifecta, and the VM is available on Atlas, the Vagrant box repository hosted by Hashicorp.)

If you've been following this series to date, you will now have a vanilla Vagrant . . .

Read More

Migrating to Django 1.8: a journey logbook

June 09, 2015

Upgrading the framework your entire website relies on is a hard job, but someone has to do it. It was my turn here at YJ: migrating from Django 1.7.8 to 1.8.2.

Here's the list of things that broke on the way. Many of them are documented in the release notes, some of them are not: they're probably quite niche and specific to our . . .

Read More

  Subscribe by Email and Never Miss a Post