質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

1回答

4042閲覧

gemspecでローカルのgemを指定することはできるのか?

mazu_mooping

総合スコア12

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2014/10/01 19:01

現在Bundlerを用いてGemの作成をしており、主にローカル環境で自作Gemを使いたいと思っております。
そこで、mygem1を作成し、その中でmygem2を使うとした場合(二つともローカルにあるとする。)
mygem1のGemfileに

lang

1gem 'mygem2',:path => '/hoge/mygem2'

とし、mygem1.gemspecに

lang

1~省略~ 2Gem::Specification.new do |spec| 3 ~省略~ 4 spec.add_dependency "mygem2" 5end

と、します。これでmygem1を保存し、railsから呼び出すために
railsのプロジェクト内のGemfileにmygem1を記述してbundle installしたところ
Could not find gem 'mygem2 (>= 0) ruby', which is required by gem 'mygem1 (>= 0) ruby', in any of the sources.
と、mygem2が見つからないというエラーが出ました。


rails project -> mygem1 -> mygem2
となるとエラーが出てしまい。
rails project -> mygem1
または
rails project -> mygem2
は無事に動作しました。

長くなりましたが、上記の問題を解決するようなgemspec,Gemfileの記述の仕方、
もしくは他の方法のご教授をお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

試してないのですが。
Gemfile で絶対パスで表記している部分を相対パスにしてはいかがでしょうか。同じ所に置いているならば

gem 'mygem2', :path => '../mygem2'

参考:How to add dependency of a local gem to a rails plugin/engine, in .gemspec file - Stack Overflow
それから、もしかすると Gemfile でバージョン指定が必要になるかも知れません。例えば

gem 'mygem2', '=0.0.1', :path => '../mygem2'

参考:[Ruby]ローカルのgemをGemfileに書いてbundle installするのにハマった件 | Fujitaiju Blog

私も興味がある内容ですので、結果ご報告をお待ちしております。

おまけ:
こういうのもありました。
BundlerでGemfileを変更せずにローカルの:pathのgemを使う - Qiita
が、トラブルの元になりそうなので、あまりやらないほうがよいかも;-)

投稿2014/10/02 02:32

riocampos

総合スコア241

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mazu_mooping

2014/10/03 10:13

回答ありがとうございます。 バージョン指定や相対パスでの設定をしてみましたが、どうしてもうまくいきませんでした。 どうしても rails project -> mygem1 -> mygem2 で、mygem1のgemspecとGemfileからローカルのmygem2を呼び出すことができないままでした。 自分なりの解決方法として。 1.mygem2をrake installする。 gemのローカルにインストールするやり方です。 このやり方だとmygem2を変更した後 rake build(省略可) rake install をして、rails projectの方でbundle updateとかして更新しないといけないので、面倒でした。 2.rails projectのGemfileで、mygem2を使うように設定する。 Gemfile内で gem "mygem1","=0.0.1",:path => "../mygem1" gem "mygem2","=0.0.1",:path => "../mygem2" Gemfileの記述が面倒ですが、これならmygem2のpathを参照している(と思うので) すぐ反映されて楽だと思いました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問