Rails BinScript

Gem for easy writing and executing scripts in Rails Application. For my purposes much better than Rake, Thor and Rails Runner.

Features:

  1. Each bin is a class
  2. Easy writing tests
  3. Custom lock file
  4. Custom logger with formatter for each script
  5. Can be daemonized

Tested on Rails 2.3 and 3.2

gem 'bin_script'
rails generate bin:bin bla

Call like:

$ cd project && ./bin/bla -e production --test -d "2012-04-07" -u "asdf"

Call examples:

$ ./bin/bla -h
$ ./bin/bla -e production
$ ./bin/bla -e production -L ./locks/bla.lock
$ ./bin/bla -e production -l ./log/bla.log
$ ./bin/bla -e production --daemonize --pidfile ./tmp/bla.pid

Example Bin

app/bins/bla_script.rb

class BlaScript < BinScript
  optional :u, "Update string"
  required :d, :description => "Date in format YYYY-MM-DD or YYYY-MM", :default => "2012-04-01"
  noarg    :t, :decription => "Test run", :alias => 'test'

  self.description = "Super Bla script"

  def test?
    params(:t)
  end

  def do!
    if test?
      logger.info "update string #{params(:u)}"
    else
      logger.info "data #{params(:d)}"
    end
  end
end

Options

class BlaScript < BinScript
  self.log_level = Logger::DEBUG
  self.enable_locking = false
  self.enable_logging = false
end

Custom exception notifier (create initializer with:)

class BinScript
  def notify_about_error(exception)
    Mailter.some_notification(exception)...
  end
end