grpc/src/ruby
Stan Hu 01c87e24da
[ruby] fix re2 compilation when older system version installed (#32580)
re2 previously failed to compile if:

1. An old `re2` version is installed with a non-standard system prefix,
such as `/opt/local`.
2. The environment variable is set: `CPPFLAGS=-I/opt/local/include`.

Running `make` would result in function prototype mismatches because the
Makefile would previously attempt to use the headers from
`/opt/local/include/re2` before the `third_party/re2/re2` directory.

https://github.com/grpc/grpc/pull/27660 caused `CPPFLAGS` to inherit
from the environment, but this can cause the Makefile to use external
include files for re2 and other libraries if `-I` flags are defined.

This commit reverts to the original behavior of only using
`RbConfig::CONFIG` values to avoid using the wrong headers.
2023-05-16 11:09:55 -07:00
..
bin Update protobuf version to 3.15.8 (#26105) 2021-04-30 11:03:23 -07:00
end2end [ruby testing]: experimental change to grpc_class_init_test (#32337) 2023-02-14 14:49:11 -08:00
ext/grpc [ruby] fix re2 compilation when older system version installed (#32580) 2023-05-16 11:09:55 -07:00
lib [Release] Bump version to 1.56.0-dev (on master branch) (#32918) 2023-04-24 10:47:57 -07:00
pb Fix regenerate protos scripts. (#32135) 2023-01-19 09:16:23 +01:00
qps Fix regenerate protos scripts. (#32135) 2023-01-19 09:16:23 +01:00
spec [surface] Ensure SEND_STATUS & RECV_MESSAGE do not inhabit the same batch (#31554) 2022-11-11 14:18:29 -08:00
stress auto-fix most of licenses 2017-06-08 11:22:41 +02:00
tools [Release] Bump version to 1.56.0-dev (on master branch) (#32918) 2023-04-24 10:47:57 -07:00
.gitignore Incorporating ruby into the master grpc repository. 2014-12-01 17:45:43 -08:00
.rubocop.yml add end2end tests to formatter and adjust to formatter 2017-03-20 00:07:25 -07:00
.rubocop_todo.yml Update default ruby version to 3.2 on linux/macos ruby builds (#32010) 2023-01-03 13:38:15 -08:00
CHANGELOG.md Corrects the Changelog date 2015-04-14 11:03:37 -07:00
README.md Update Ruby documentation for Gemfile usage (#25705) 2021-04-19 14:31:26 -07:00

README.md

Gem gRPC Ruby

A Ruby implementation of gRPC.

PREREQUISITES

  • Ruby 2.x. The gRPC API uses keyword args.

INSTALLATION

Linux and Mac OS X:

gem install grpc

If using a Gemfile and you wish to pull from a git repository or GitHub, make sure to tell bundler to retrieve submodules:

gem 'grpc', github: 'grpc/grpc', submodules: true

BUILD FROM SOURCE

  • Clone this repository

  • Init submodules

git submodule update --init
  • Install Ruby 2.x. 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
$
$ # 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, build and 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

DOCUMENTATION

  • rubydoc for the gRPC gem is available online at rubydoc.
  • the gRPC Ruby reference documentation is available online at grpc.io

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 unittests

  • bin: example gRPC clients and servers, e.g,

    stub = Math::Math::Stub.new('my.test.math.server.com:8080', :this_channel_is_insecure)
    req = Math::DivArgs.new(dividend: 7, divisor: 3)
    GRPC.logger.info("div(7/3): req=#{req.inspect}")
    resp = stub.div(req)
    GRPC.logger.info("Answer: #{resp.inspect}")