Virginia is a Reel interface to Adhearsion, named after a dance originating in the 17th century, the Virginia Reel. Now your web apps can dance with your voice apps!

Virginia allows you to bundle a simple web interface in your Adhearsion application. You can use any Rack-compatible framework with Reel.


The plugin defines three configuration keys.

  • host: Which IP to bind on (defaults to
  • port: Which port to listen on (defaults to 8080)
  • rackup: Location of the Rackup configuration file (defaults to

Sinatra Example

This example uses Sinatra, but this should work with any Rack-compatible framework.

Update Gemfile

Add the framework gem to your Gemfile, in our case, Sinatra:

gem 'sinatra'

Don't forget to run bundle install.

Create the app

Here is a simple "Hello World" app in Sinatra. Place this in lib/sinatra_app.rb:

require 'sinatra'

get '/' do
  'Hello world!'

Configure Rack

Finally, tell Rack how to start your web app. Place this in

require "#{Adhearsion.root}/lib/sinatra_app.rb"
run Sinatra::Application

Test the app

Start Adhearsion. You should be able to visit http://localhost:8080/ in your browser and see "Hello world!"

Using the built-in document cache

Assuming you are using Sinatra like in the above examples, put this in your lib/sinatra_app.rb:

require 'sinatra'

get '/documents/:id' do
    document = Virginia::DocumentCache.fetch params[:id]
    headers['Content-Type'] = document.content_type
  rescue Virginia::DocumentCache::NotFound
    raise Sinatra::NotFound

Then, to store a document in the cache, do this in your CallController:

cache_id = 'Hello World!'
virginia_config = Adhearsion.config.virginia "Document has been cached to http://#{}:#{virginia_config.port}/documents/#{cache_id}"

You should be able to retrieve the document at the logged URL.


Original author: Luca Pradovera


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 so I can ignore when I pull
  • Send me a pull request. Bonus points for topic branches.

Copyright (c) 2012-2014 Adhearsion Foundation Inc. MIT license (see LICENSE for details).