Rails BinScript

August 24, 2013 ยท View on GitHub

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