SingleInstance

SingleInstance creates a system-wide lock that prevents multiple copies of the same code to run at the same time. We use it to make sure that ‘cron` jobs do not start if an earlier invocation is still running.

# in Rakefile
task :build_models do |t, args|
  SingleInstance.exclusive_non_blocking(:build_models) do
    # ...
  end
end

Optionally, the block can be allowed to react to the fact that another process is running:

SingleInstance.exclusive_non_blocking(:build_models) do |blocker|
  if blocker
    puts "Cannot run; pid #{blocker.pid} is running since #{blocker.started_at}"
  else
    # ...
  end
end

Note on Patches/Pull Requests

  • Fork the project.

  • Make your feature addition or bug fix.

  • Add tests for it. This is important so I don’t break it in a future version unintentionally.

  • Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but

    bump version in a commit by itself I can ignore when I pull)
    
  • Send me a pull request. Bonus points for topic branches.

Copyright © 2010 ICE House AB. See LICENSE for details.