Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/kostya/bin_script

Easy writing and executing bins(executable scripts) in Rails Application (especially for crontab or god). For my purposes much better than Rake, Thor and Rails Runner.
https://github.com/kostya/bin_script

Last synced: 4 days ago
JSON representation

Easy writing and executing bins(executable scripts) in Rails Application (especially for crontab or god). For my purposes much better than Rake, Thor and Rails Runner.

Awesome Lists containing this project

README

        

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

``` ruby
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

``` ruby
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

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

### Custom exception notifier (create initializer with:)

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