Discourse がプラグインで指定された gem を見つけられない

こんにちは!EthereumでサインインをDiscourseで有効にするためのプラグインを開発しています。問題は、プラグインをインストールすると、依存関係の1つ(rbsecp256k1)でエラーが発生することです。

ERROR:  rbsecp256k1のインストール中にエラーが発生しました:
	ERROR: gem native extensionのビルドに失敗しました。

    現在のディレクトリ: /var/www/discourse/plugins/sdp/gems/2.7.5/gems/rbsecp256k1-5.1.0/ext/rbsecp256k1
/usr/local/bin/ruby -I /usr/local/lib/ruby/site_ruby/2.7.0 -r ./siteconf20220303-1234-gyqjb.rb extconf.rb
extconf.rb:3:in `require': mini_portile2 を読み込めません (LoadError)
	from extconf.rb:3:in `<main>'

extconf は失敗しました。終了コード 1

開発環境では依存関係を手動でインストールすれば動作するので、何が起こっているのか疑問に思っています。

そのgemには、ドキュメントによると、OSレベルの依存関係がインストールされている必要があります: GitHub - etscrivner/rbsecp256k1: Compiled Ruby wrapper around libsecp256k1 for secp256k1 ECDSA.

はい、それらはすでにインストールされています。問題は、依存関係の1つであるmini_portile2が見つからない場合に発生します。

「いいね!」 1

mini_portile2 依存関係をプラグインにどのように宣言しましたか?

「いいね!」 1

同じgem依存関係をインストールする際に同じ問題が発生しました。

こちらをご覧ください

もっと簡単な解決策があれば嬉しいです。

「いいね!」 2

それをDiscourseコアに既に含まれているものなので、削除することはできませんか?

「いいね!」 1

いや、できるのですが、問題はそのgemではなく、rbsecp256k1 にあります。ビルドしようとすると mini_portile2 gem が見つかりません(エラーメッセージにあるように: cannot load such file -- mini_portile2 (LoadError) from extconf.rb:3:in <main>')。

@fzngagan さんと同じ内容を繰り返しています。上記のリンクをご覧ください: Having a hard time installing `eth` gem in a plugin in production - #3 by fzngagan

彼の解決策は機能しますが、有効な選択肢とは考えられません。ユーザーがプラグインを追加するためだけにすべてを行うことを望むとは思えません。もっと良いアプローチ(リポジトリを追加するだけで完了するような、それに最も近いもの)を誰かが考えられるかどうかを知りたかっただけです。@fzngagan 自身が言ったように:

もっと直接的な解決策があればいいのですが。

そして今、全く同じ問題について2つのトピックがあります…

「いいね!」 1

絞り込んできましたが、gem に関連しているようではなく、extconf.rb に関連しているようです。より複雑なセットアップの他のいくつかの gem (ruby-magiclibusb) を試しましたが、どちらも機能しませんでした(異なる理由で)。共通しているのは、extconf.rb への依存関係です。

「いいね!」 1

この問題は、discourse の最新の tests-passed および stable ブランチで修正されました。

「いいね!」 2

まだです。PRはまだマージされていません。

「いいね!」 1

@RGJ まず対処する必要のあるテストの失敗がいくつかありました。現在マージされています。

「いいね!」 2