プラグインで `eth` gem のインストールに苦労しています

プラグインに eth gem をインストールする必要があるのですが、非常に苦労しています。他の多くの gem に依存しており、そのうちのいくつかはネイティブ拡張機能を持っています。試していただけるように、依存関係のリストを以下に示します。

gem 'pkg-config', '1.4.7', require: false
gem 'mkmfmf', '0.4', require: false
gem 'keccak', '1.3.0', require: false
gem 'zip', '2.0.2', require: false
gem 'mini_portile2', '2.7.0', require: false
gem 'rbsecp256k1', '5.1.0', require: false
gem 'konstructor', '1.0.2', require: false
gem 'ffi', '1.15.5', require: false
gem 'ffi-compiler', '1.0.1', require: false
gem 'scrypt', '3.0.7', require: false
gem 'eth', '0.5.1', require: false
gem 'siwe', '1.0.0', require: false

問題は rbsecp256k1 にあります。ネイティブ拡張機能のビルドのために mini_portile2 を要求しようとしますが、インストールされて require されているにもかかわらず、見つけることができません。フォークして絶対パスを手動で要求したり、文字通り mini_portile2rbsecp256k1 にクローンしてそこから要求したりと、あらゆる手を尽くしましたが、まだ何も機能していません。

何か助けがあれば大変ありがたいです。

「いいね!」 2

なんとか回避策を見つけました。すぐに共有します。

「いいね!」 3

サーバーにログインし、Dockerコンテナに入りました。

  • gems という名前のフォルダを作成します。

  • サブディレクトリ 2.7.5 を作成します(tests-passed の本番環境 Discourse が使用する Ruby バージョン)。

  • gems フォルダに戻ります。

  • 次のような形式でコマンドを実行します。

    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
    ...
    

    注:これらは、Discourse が gem をインストールするために(実行しようとして失敗する)実行するのと同じコマンドです。

  • 次に、このフォルダを zip 圧縮します。

  • Docker コンテナを終了し、docker cp コマンドを使用して zip ファイルを Docker コンテナの外にコピーします。

  • FileZilla または VSCode でサーバーに接続し、zip ファイルをダウンロードします。

  • プラグインのルートフォルダに解凍します。これにより、プラグインフォルダに gems ディレクトリができます。

  • 次に、gems フォルダをプラグインと共に GitHub にプッシュします。

これで、このプラグインで Discourse を再構築すると、Discourse は提供された依存関係を使用し、それらをインストールしようとしなくなります。これは一時的な回避策であり、Discourse が Ruby バージョンを更新した際には再実行する必要があります。

しかし、大きな疑問は、ターミナルから実行すると機能する同じコマンドが、Discourse が実行しようとすると失敗するのはなぜかということです。これは調査する価値があり、簡単な修正があることを願っています。

「いいね!」 3

これは最近、以下で修正しました。

「いいね!」 3

素晴らしい、ありがとう。 :clap:

この修正を stable に cherry pick していただけますでしょうか? @tgxworld

「いいね!」 1

DEV: Don't load bundler when installing plugin gem. by tgxworld · Pull Request #16176 · discourse/discourse · GitHub で行いました

「いいね!」 3