プラグインgem依存関係のGem::MissingSpecError

Discourse のプラグインを作成し、plugin.rb に次のように gem 依存関係を追加しました。

gem 'faraday-multipart', '1.1.0', require_name: 'faraday/multipart'

その後、app.yml でこのプラグインを参照し、launcher rebuild app を実行したところ、次のようなエラーが発生しました。

...
I, [2025-02-10T15:54:07.383295 #1]  INFO -- : > cd /var/www/discourse & su discourse -c 'bundle exec rake db:migrate'
rake aborted!
Gem::MissingSpecError: Could not find 'multipart-post' (~> 2.0) among 233 total gem(s) (Gem::MissingSpecError)
Checked in 'GEM_PATH=/var/www/discourse/vendor/bundle/ruby/3.3.0:/var/www/discourse/plugins/discourse-watermark/gems/3.3.6' at: /var/www/discourse/plugins/discourse-watermark/gems/3.3.6/specifications/faraday-multipart-1.1.0.gemspec, execute `gem env` for more information
/var/www/discourse/lib/plugin_gem.rb:25:in `load'
/var/www/discourse/lib/plugin/instance.rb:858:in `gem'
/var/www/discourse/plugins/discourse-watermark/plugin.rb:10:in `activate!'
/var/www/discourse/lib/plugin/instance.rb:801:in `instance_eval'
/var/www/discourse/lib/plugin/instance.rb:801:in `activate!'
/var/www/discourse/lib/discourse.rb:348:in `block in activate_plugins!'
/var/www/discourse/lib/discourse.rb:345:in `each'
/var/www/discourse/lib/discourse.rb:345:in `activate_plugins!'
/var/www/discourse/config/application.rb:233:in `block in <class:Application>'
/var/www/discourse/lib/plugin.rb:6:in `initialization_guard'
/var/www/discourse/config/application.rb:233:in `<class:Application>'
/var/www/discourse/config/application.rb:75:in `<module:Discourse>'
/var/www/discourse/config/application.rb:74:in `<top (required)>'
/var/www/discourse/Rakefile:7:in `<top (required)>'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/exe/rake:27:in `<top (required)>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
...
I, [2025-02-10T15:54:09.620121 #1]  INFO -- : gem install faraday-multipart -v 1.1.0 -i /var/www/discourse/plugins/discourse-watermark/gems/3.3.6 --no-document --ignore-dependencies --no-user-install
Successfully installed faraday-multipart-1.1.0
1 gem installed

I, [2025-02-10T15:54:09.625734 #1]  INFO -- : Terminating async processes
...
FAILED
...

db:migrate ステップで失敗していますが、ログの後半では gem faraday-multipart が正常にインストールされたと表示されています。私の推測では、db:migrate が gem のインストール前に実行されているのではないかということですが、Discourse には gem 依存関係を持つ多くのプラグインがあり、それらが何らかの方法で機能しているため、おそらく何かを見落としているのだと思います。

「いいね!」 2

残念ながら、プラグインの gem ヘルパーはサブ依存関係を自動的にインストールしないため、手動でインストールする必要があります。

以下は faraday-multipart を使用するプラグインの例です。

「いいね!」 2

ああ、そのような迅速な返答をありがとうございます!気づきませんでしたが、それはサブ依存関係なんですね😅 試してみます。
追記。はい、これで動きました:

gem 'multipart-post', '2.4.1', require_name: 'multipart/post'
gem 'faraday-multipart', '1.1.0', require_name: 'faraday/multipart'

重要:サブ依存関係は元の依存関係の前に配置してください。例として、multipart-postfaraday-multipartの前に置く必要があります。あなたの例のようにです。

「いいね!」 2

これはDiscourse開発における完全なミニゲームです :wink:

#devに移動しました

「いいね!」 2