Sebentar tadi saya menggunakan imej ubuntu untuk menjana fail PHP melalui protoc lib dan ia menghasilkan beberapa kelas metadata yang mengandungi cincang biasa yang digunakan oleh protobuf. Begini cara ia dijana:
namespace MyApp\ProtobufMetadata\Schema\v1; class Request { public static $is_initialized = false; public static function initOnce() { $pool = \Google\Protobuf\Internal\DescriptorPool::getGeneratedPool(); if (static::$is_initialized == true) { return; } $pool->internalAddGeneratedFile(hex2bin( "0acd010a236170692f636174616c6f672f736368656d612f76312f726571756573742e70726f746f121d6170692e636174616c6f672e736368656d612e76312e72657175657374221d0a0a47657452657175657374120f0a0776657273696f6e18012001280d4260ca022d4350515c5368617265645c53657276696365735c436174616c6f675c536368656d615c76315c52657175657374e2022d4350515c5368617265645c50726f746f6275664d657461646174615c436174616c6f675c536368656d615c7631620670726f746f33" ), true); static::$is_initialized = true; } }
Tetapi sekarang saya perlu menggunakan penggunaan alpine. Saya mencipta Dockerfile dengan memasang protobuf dari github:
ENV PROTOBUF_VERSION 3.19.4 ENV PROTOBUF_URL https://github.com/google/protobuf/releases/download/v"$PROTOBUF_VERSION"/protobuf-cpp-"$PROTOBUF_VERSION".zip RUN curl -L -o protobuf.zip "$PROTOBUF_URL" RUN unzip protobuf.zip && cd protobuf-"$PROTOBUF_VERSION" && ./configure && make -j$(nproc) && make install RUN cd .. && rm protobuf.zip
Tetapi selepas ini, apabila saya menjana kelas baharu, ia menjana kelas metadata dengan beberapa pandangan pelik:
<?php # Generated by the protocol buffer compiler. DO NOT EDIT! # source: api/schema/v1/request.proto namespace MyApp\ProtobufMetadata\Schema\v1; class Request { public static $is_initialized = false; public static function initOnce() { $pool = \Google\Protobuf\Internal\DescriptorPool::getGeneratedPool(); if (static::$is_initialized == true) { return; } $pool->internalAddGeneratedFile( ' � #api/schema/v1/request.protoapi.schema.v1.request" GetRequest version ( B`�-MyApp\Services\Catalog\Schema\v1\Request�-MyApp\ProtobufMetadata\Catalog\Schema\v1bproto3' , true); static::$is_initialized = true; } }
Ada sesiapa yang mengalami masalah yang sama? Adakah terdapat cara untuk membetulkan pemasangan lib atau beberapa kompilasi untuk mengembalikan kod cantik menggunakan hex2bin?
Kompil dengan menggunakan arahan RoadRunner:
[ -f ./protoc-gen-php-grpc ] || ./rr get-protoc-binary && chmod +x ./protoc-gen-php-grpc && ./rr compile-proto-files"
Sistem hos ialah MacOS
Ini dilakukan dengan sengaja, Alpine anda mungkin hanya menjalankan versi protokol yang lebih baharu.
Berikut ialah PR untuk mengalih keluar panggilan hex2bin: https://github.com/protocolbuffers /protobuf/pull/8006