# 플러그인 gem 종속성에서 발생하는 Gem::MissingSpecError

**URL:** https://meta.discourse.org/t/gem-missingspecerror-for-plugin-gem-dependency/351490
**Category:** Development
**Tags:** plugin-api
**Created:** [2월 10, 2025, 4:33오후 UTC](https://meta.discourse.org/t/gem-missingspecerror-for-plugin-gem-dependency/351490 "2025-02-10T16:33:09Z")
**Posts on this page:** 4
**Page:** 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: [2월 10, 2025, 4: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 의존성이 있는 플러그인이 많고 그것들이 어떻게든 작동하므로, 제가 무언가를 놓치고 있는 것 같습니다.

---

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [2월 10, 2025, 4:49오후 UTC](https://meta.discourse.org/t/gem-missingspecerror-for-plugin-gem-dependency/351490/2 "2025-02-10T16:49:17Z")

</div>

불행히도 플러그인 `gem` 헬퍼는 하위 종속성을 자동으로 설치하지 않으므로, 해당 종속성을 수동으로 설치해야 합니다.

다음은 `faraday-multipart`를 사용하는 플러그인의 예시입니다:

> <https://github.com/discourse/discourse-zendesk-plugin/blob/0d24cfa4aeedc224cb35749341b6188095701c5f/plugin.rb#L13C3-L14C34>

---

<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: [2월 10, 2025, 4:57오후 UTC](https://meta.discourse.org/t/gem-missingspecerror-for-plugin-gem-dependency/351490/3 "2025-02-10T16:57:24Z")

</div>

오, 이렇게 빠르게 답변해 주셔서 감사합니다! 심지어 이게 서브의존성이라는 사실도 몰랐어요 😅 시도해 보겠습니다.  
**UPD.** 네, 이렇게 하면 작동했습니다:

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

```

중요: 서브의존성은 원래 의존성보다 앞에 와야 합니다. 예를 들어, 당신의 예시처럼 `multipart-post`는 `faraday-multipart`보다 앞에 와야 합니다.

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [2월 10, 2025, 9:24오후 UTC](https://meta.discourse.org/t/gem-missingspecerror-for-plugin-gem-dependency/351490/4 "2025-02-10T21:24:49Z")

</div>

이것은 Discourse 개발용 완전한 미니게임입니다 🙂

(#dev로 이동됨)
