Don't Fear the Reaper: Detecting Failed Delayed Job Workers

By Joel Turkel on Oct 30, 2013 6:15:00 AM

Update: The plugin discussed in this post has been packaged into the delayed_job_heartbeat_plugin gem.

Previously we've blogged about how to write Delayed Job plugins and how to aggregate jobs into job groups. In this post we'll explore how to proactively detect failed Delayed Job workers so their jobs can be retried in a timely manner. This is useful if a worker crashes, is automatically restarted by your platform provider, or is shutdown by auto-scaling infrastructure.

Read More →

Invoking Super Methods in JavaScript

By Dan Freeman on Oct 17, 2013 1:15:00 PM

For newcomers to JavaScript, the language's prototypical inheritance model is often a source of confusion, particularly for those used to classical inheritance in languages like Java, C++, and Ruby. Right off the bat, new JS developers generally hit a few blocking questions:

Read More →

When Developers Collide! Resolving sequencing conflicts in ActiveRecord migrations

By Randy Burkes on Sep 12, 2013 5:22:00 AM

Here at Salsify we follow a git flow branching model, so it is common for us each to work independently on feature branches while regularly merging to and from a shared develop branch. We also routinely push code to staging and production environments for internal review and release. The combination of our fast-paced development environment and extensive use of branching occasionally results in conflicts when landing new features. We recently encountered one of these conflicts (sequencing not code) in a pair of ActiveRecord migrations and found a workaround we thought might be useful to others. The following migration excerpts were written on two different branches:

Read More →

Data Binding in Backbone with Epoxy

By Dan Spangenberger on Aug 13, 2013 6:02:00 PM

At Salsify we're developing a single-page Javascript app backed by Rails. We've done so with Backbone, extending its functionality through various extension projects when needed (Marionette, Cocktail, etc). The project we've made the most use of lately is Epoxy, and that's what I'll talk about today.

Read More →

Adding Job Groups to Delayed Jobs

By Joel Turkel on Jul 29, 2013 5:47:00 PM

Recently I blogged about the Delayed Job plugin mechanism. In this post we'll explore how we can use this plugin mechanism to add job groups to Delayed Job allowing us to:

Read More →

Capturing Logs from Rake Tasks and Rails Console on Heroku

By Jeremy Redburn on Jul 8, 2013 1:41:00 PM

Quick one today, but hopefully useful for others as it wasted a few hours of our time. At Salsify, we've been using Rake tasks to handle a few one-off data migrations. We ran into trouble, however, when the many logging statements we'd included didn't show up in our logs. We use PaperTrail but after some digging realized this applies to Heroku's base logging as well (at least on the Cedar stack).

Read More →

Using Cocktail to create Mixins for Backbone Models that Respect Inheritance

By Dan Spangenberger on Jun 17, 2013 8:00:00 PM

At Salsify we use Backbone heavily to represent our data, fully embracing its Model/Collection paradigm. Backbone models and collections in fact represent all server-managed state in our single-page Javascript client application. We also use Backbone views, relying heavily on Marionette to structure our presentation and Epoxy to bind our model data to the DOM in our views.

Read More →

Easy Eager Loading with Database Views

By Jeremy Redburn on May 28, 2013 6:57:00 PM

One of the best things about Rails is how easy it is to interact with the database. Unfortunately, that's also one of the worst things about Rails if you care about performance (which you hopefully do). Inevitably, you'll find your application slowing down and track down the root cause to a recent change that spawned far more database queries than you expected, or hits the database when you least expected it.

Read More →

Delayed Jobs Callbacks and Hooks in Rails

By Joel Turkel on Apr 18, 2013 4:56:00 PM

Salsify is a single-page app (Backbone on the client, Rails + Postgres + Elastic Search on the backend) that requires very low latency responses to provide an interactive experience for browsing and editing product catalogs. In order to satisfy these latency requirements we rely heavily on Delayed Job for running time consuming tasks like importing data, exporting data, and applying bulk updates in background processes. We've found useful pattern for using Delayed Jobs callbacks and hooks together that I wanted to share.

Read More →

JSON Streaming Parser for PHP

By Rob Gonzalez on Mar 20, 2013 4:54:00 PM

Recently I looked around for a JSON streaming parser written in PHP and couldn't find one. So I wrote my own and am making it available to anyone who wants to use it.

Read More →

Recent Posts