tree: 2311ab48e2c8baf76f60cadbdfb7fcb3e2f69999 [path history] [tgz]
  1. bin/
  2. ext/
  3. lib/
  4. spec/
  5. .gitignore
  6. .rspec
  7. .rubocop.yml
  8. .rubocop_todo.yml
  9. CHANGELOG.md
  10. Gemfile
  11. grpc.gemspec
  12. Rakefile
  13. README.md
src/ruby/README.md

gRPC Ruby

A Ruby implementation of gRPC.

Status

Alpha : Ready for early adopters

INSTALLATION PREREQUISITES

This requires Ruby 2.1, as the RPC API surface uses keyword args.

QUICK - INSTALL

  • Clone this repository.
  • Follow the instructions in INSTALL to install the gRPC C core.
  • If you don't have Ruby 2.1 installed, switch to the more detailed instructions below
  • Use bundler to install
$ # from this directory
$ gem install bundler && bundle install

Installing from source

  • Build the gRPC C core E.g, from the root of the gRPC git repo
$ cd ../..
$ make && sudo make install
  • Install Ruby 2.1. Consider doing this with RVM, it's a nice way of controlling the exact ruby version that's used.
$ command curl -sSL https://rvm.io/mpapis.asc | gpg --import -
$ \curl -sSL https://get.rvm.io | bash -s stable --ruby=ruby-2.1
$
$ # follow the instructions to ensure that your're using the latest stable version of Ruby
$ # and that the rvm command is installed
  • Make sure your run source $HOME/.rvm/scripts/rvm as instructed to complete the set up of RVM

  • Install bundler

$ gem install bundler
  • Finally, install the gRPC gem locally.
$ # from this directory
$ bundle install  # creates the ruby bundle, including building the grpc extension
$ rake  # runs the unit tests, see rake -T for other options

CONTENTS

Directory structure is the layout for ruby extensions

  • ext: the gRPC ruby extension
  • lib: the entrypoint gRPC ruby library to be used in a 'require' statement
  • spec: Rspec unittest
  • bin: example gRPC clients and servers, e.g,
stub = Math::Math::Stub.new('my.test.math.server.com:8080')
req = Math::DivArgs.new(dividend: 7, divisor: 3)
logger.info("div(7/3): req=#{req.inspect}")
resp = stub.div(req)
logger.info("Answer: #{resp.inspect}")