Difficulté à installer la gemme `eth` dans un plugin en production

Voici ce que j’ai fait. Je me suis connecté au serveur et suis entré dans le conteneur Docker.

  • Créez un dossier nommé gems

  • Créez un sous-répertoire 2.7.5 (version Ruby utilisée par le Discourse de production sur tests-passed)

  • Revenez au dossier gems

  • Exécutez les commandes de cette manière

    RUBY_VERSION=2.7.5
    gem install pkg-config -v 1.4.7 -i $RUBY_VERSION --no-document --ignore-dependencies --no-user-install
    gem install mkmfmf -v 0.4 -i $RUBY_VERSION --no-document --ignore-dependencies --no-user-install
    ...
    

    Remarque : ce sont exactement les mêmes commandes que Discourse exécute (tente d’exécuter, mais échoue) pour installer les gems.

  • Compressez maintenant ce dossier.

  • Quittez le conteneur Docker et copiez le fichier zip à l’extérieur du conteneur Docker à l’aide de la commande docker cp.

  • Connectez-vous à votre serveur via FileZilla ou VSCode et téléchargez le fichier zip.

  • Extrayez-le dans le dossier racine de votre plugin. Votre dossier de plugin contiendra donc maintenant le répertoire gems.

  • Poussez maintenant le dossier gems avec le plugin sur GitHub.

Maintenant, lorsque vous reconstruirez Discourse avec ce plugin, Discourse utilisera les dépendances que vous lui avez fournies et n’essaiera pas de les installer. Il s’agit d’une solution de contournement temporaire qui devra être refaite une fois que Discourse aura mis à jour la version Ruby.

Mais voici la grande question : pourquoi les mêmes commandes qui fonctionnent lorsqu’elles sont exécutées depuis le terminal échouent-elles lorsque Discourse essaie de les exécuter ? Cela vaut vraiment la peine d’y regarder et j’espère qu’il existe une solution simple.

3 « J'aime »