Ruby client for interacting with Heroku processes.
Ruby
Switch branches/tags
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
data
lib
.gitignore
CONTRIBUTING.md
CONTRIBUTORS.md
Gemfile
Gemfile.lock
LICENSE.md
README.md
Rakefile
rendezvous.gemspec

README.md

Rendezvous

TODO: Write a gem description

Installation

Add this line to your application's Gemfile:

gem 'rendezvous'

And then execute:

$ bundle

Or install it yourself as:

$ gem install rendezvous

Usage

require 'rendezvous'
require 'heroku-api'
require 'netrc'

username, api_key = Netrc.read['api.heroku.com']

heroku = Heroku::API.new(:api_key => api_key)

env = { 'TERM' => ENV['TERM'] }
begin
  env['COLUMNS']  = `tput cols`.strip
  env['LINES']    = `tput lines`.strip
rescue
end

data = heroku.post_ps(
  'testable',
  'bash',
  { :attach => true, :ps_env => env }
).body

Rendezvous.start(
  :url => data['rendezvous_url']
)

The Rendezvous class reads and writes from STDIN and STDOUT. If you want to manage that programatically, you can pass in other IO objects.

    rz = Rendezvous.new({input:StringIO.new, output:StringIO.new, url: data['rendezvous_url']})
    rz.start
    # log the output, remember to rewind so it can be read
    rz.output.rewind
    log.debug("Results:#{rz.output.readlines.join}")

Since the Rendezvous class uses blocking IO, you may want to wrap it in a Thread so your main thread can continue while data is being read.

Thread.new do
  begin
    # set an activity timeout so it doesn't block forever
    rz = Rendezvous.new({input:StringIO.new, output:StringIO.new, url: data['rendezvous_url'], activity_timeout:300})
    rz.start
    # do something with output ...
  rescue => e
    log.error("Error capturing output for dyno\n#{e.message}")
  end
  
  log.debug("completed capturing output for dyno")
end

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request