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
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request