Your Ruby App Should Have a `bin/console`
Those of us who have worked or are working on Rails are somewhat spoiled by the ability to boot script/rails console
and immediately start running commands from inside our projects. What may not be very well known is that this console isn’t a piece of Rails black magic, and makes a nice pattern that extends well to any other type of non-Rails Ruby project.
Here’s the basic pattern:
#!/usr/bin/env ruby
require "irb"
require "irb/completion" # easy tab completion
# require your libraries + basic initialization
IRB.start
With the right initialization, this will immediately drop you into a console with all your project’s models, classes, and utilities available, and even with tab completion! It also translates easily over to cloud platforms, being only one heroku run bin/console
away, so to speak.
I picked up the idea somewhere at Heroku where public opinion generally sways against heavy Rails-esque frameworks and towards more custom solutions built from the right set of lightweight components.
Here’s a real world example for the bin/console of Hekla, which runs this technical journal:
#!/usr/bin/env ruby
require "irb"
require "irb/completion"
require "bundler/setup"
Bundler.require
$: << "./lib"
require "hekla"
DB = Sequel.connect(Hekla::Config.database_url)
require_relative "../models/article"
# Sinatra actually has a hook on `at_exit` that activates whenever it's
# included. This setting will supress it.
set :run, false
IRB.start