Générer des classes de métadonnées Brocken sur l'image Docker alpine via protobuf
P粉824889650
P粉824889650 2024-02-17 15:33:51
0
1
364

Il y a quelque temps, j'ai utilisé une image Ubuntu pour générer des fichiers PHP via protoc lib et elle a généré des classes de métadonnées contenant des hachages normaux utilisés par protobuf. Voici comment il est généré :

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;
    }
}

Mais maintenant, je dois utiliser l'usage alpin. J'ai créé le Dockerfile en installant protobuf depuis 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

Mais après cela, lorsque je génère de nouvelles classes, cela génère des classes de métadonnées avec des vues étranges :

<?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;
    }
}

Quelqu'un a-t-il rencontré des problèmes similaires ? Existe-t-il un moyen de corriger l'installation de la bibliothèque ou une compilation pour renvoyer un joli code en utilisant hex2bin ?

Compilez en utilisant la commande de RoadRunner :

[ -f ./protoc-gen-php-grpc ] || ./rr get-protoc-binary
      && chmod +x ./protoc-gen-php-grpc
      && ./rr compile-proto-files"

Le système hôte est MacOS

P粉824889650
P粉824889650

répondre à tous(1)
P粉018653751

Cela est fait exprès, votre Alpine utilise peut-être simplement une version plus récente du protocole.

Ce qui suit est le PR pour supprimer l'appel hex2bin : https://github.com/protocolbuffers /protobuf/pull/8006

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!