Project

rendezvous

0.15
No commit activity in last 3 years
No release in over 3 years
Client for interacting with Heroku processes.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies
 Project Readme

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