grpc / grpc.io

Repository for the gRPC website and documentation
https://grpc.io
Other
420 stars 444 forks source link

PHP Basics tutorial has multiple issues #1274

Open ajlive opened 7 months ago

ajlive commented 7 months ago

There are multiple issues with https://grpc.io/docs/languages/php/basics/.

Instructions to build grpc_php_plugin appear to be outdated.

This section produces an error:

$ cd grpc
$ mkdir -p cmake/build
$ pushd cmake/build
$ cmake ../..
$ make protoc grpc_php_plugin
$ popd

Then change to route guide directory and compile the example’s .proto files:

$ cd examples/php/route_guide
$ ./route_guide_proto_gen.sh

The script errors:

./route_guide_proto_gen.sh: line 25: bazel-bin/external/com_google_protobuf/protoc: No such file or directory

Instead, the instructions should say to use bazel as in https://github.com/grpc/grpc/issues/25350#issuecomment-773688947:

./tools/bazel build @com_google_protobuf//:protoc
./tools/bazel build src/compiler:grpc_php_plugin

The node server has moved

This section produces an error:

To try the sample app, we need a gRPC server running locally. Let’s compile and run, for example, the Node.js server in this repository:

$ cd ../../node
$ npm install

nmp install errors:

$ npm install
npm ERR! Cannot use 'in' operator to search for 'bundleDependencies' in These examples have been moved to https://github.com/grpc/grpc-node/tree/master/examples

This is because the package.json is just a string:

$ cat package.json
"These examples have been moved to https://github.com/grpc/grpc-node/tree/master/examples"

I'd suggest simply linking to https://github.com/grpc/grpc-node/tree/master/examples/routeguide but there are no instructions there for running the route guide example. So perhaps it would be better to give people specific instructions to run the node server inside the php examples directory:

$ git clone https://github.com/grpc/grpc-node.git
$ cd grpc-node/
$ npm install
$ cd dynamic_codegen/
$ node ./route_guide_server.js --db_path=route_guide_db.json

Note that the current instructions have the node command incorrectly written as nodejs:

$ nodejs ./route_guide_server.js --db_path=route_guide_db.json
fish: Unknown command: nodejs

Client script fails

$ ./run_route_guide_client.sh

eventually hits this error:

Running RecordRoute...
PHP Fatal error:  Uncaught TypeError: count(): Argument #1 ($value) must be of type Countable|array, string given in grpc/examples/php/route_guide/route_guide_client.php:115
Stack trace:
#0 grpc/examples/php/route_guide/route_guide_client.php(203): runRecordRoute()
#1 grpc/examples/php/route_guide/route_guide_client.php(212): main()
#2 {main}
  thrown in grpc/examples/php/route_guide/route_guide_client.php on line 115

This is because:

$ cat ../../node/static_codegen/route_guide/route_guide_db.json
"These examples have been moved to https://github.com/grpc/grpc-node/tree/master/examples"

Pointing run_route_guide_client.sh to ./grpc-node/examples/routeguide/static_codegen/route_guide_db.json fixes the issue.

Fix

I'd be happy to make a PR to fix these instructions if there's agreement that cloning grpc-node into the examples/php/route_guide directory makes sense.

eugeneo commented 7 months ago

@stanley-cheung Please take a look

stanley-cheung commented 7 months ago

Thanks for logging this issue. Yea the php example is outdated.

On the suggestion, I think we should just link to the grpc/grpc-node repo instead of copying any code. (i.e. update the instruction to say "use grpc/grpc-node in this way")

ajlive commented 7 months ago

I think we should just link to the grpc/grpc-node repo instead of copying any code. (i.e. update the instruction to say "use grpc/grpc-node in this way")

Yeah, this sounds better. I'll make a PR for these changes next week to get the ball rolling!