# Gem::MissingSpecError 插件依赖项

**URL:** <https://meta.discourse.org/t/gem-missingspecerror-for-plugin-gem-dependency/351490>\
**Category:** Development\
**Tags:** plugin-api\
**Created:** [2025年二月10日 16:33 UTC](https://meta.discourse.org/t/gem-missingspecerror-for-plugin-gem-dependency/351490 "2025-02-10T16:33:09Z")\
**Posts on this page:** 1\
**Showing post:** 1

<div class="post-metadata">

**Author:** ![lllukom](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/lllukom/32/427100_2.png) [@lllukom](https://meta.discourse.org/u/lllukom)\
**Post date:** [2025年二月10日 16:33 UTC](https://meta.discourse.org/t/gem-missingspecerror-for-plugin-gem-dependency/351490/1 "2025-02-10T16:33:09Z")

</div>

我为 Discourse 创建了一个插件，并在 `plugin.rb` 中添加了一个 gem 依赖项，如下所示：

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

```

然后我在 `app.yml` 中引用了这个插件，并执行了 `launcher rebuild app`，收到了如下错误：

```plaintext
...
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` 步骤失败了，尽管日志后面显示 `faraday-multipart` gem 已成功安装。我的猜测是 `db:migrate` 在 gem 安装之前运行，但我可能遗漏了什么，因为 Discourse 有很多带有 gem 依赖项的插件，它们都能正常工作。

---

_[View the full topic](https://meta.discourse.org/t/gem-missingspecerror-for-plugin-gem-dependency/351490)._
