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

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

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

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

解決済

[Ruby]bundle exec ruby example.rb 実行時にGemがCould not findになる件について

yuuki0218
yuuki0218

総合スコア22

Ruby

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

1回答

0評価

0クリップ

380閲覧

投稿2019/04/08 07:54

編集2019/04/09 09:07

develop環境にてメインプログラムとは別のディレクトリにツールを配置ライブラリの管理はbundleを利用して実行しようとしたのですが
「bundle exec ruby example.rb」とした際に「Could not find ~ in any of the sources」と出力されrbファイルが実行できません。
ネットの海に解決策を探しに出たのですが何をしても解決につながらなかったので質問させていただきたいです。

環境

AmazonLinux AMI release 2016.09
Apache 2.4.27(Unix) ※ソースからビルド
Ruby 2.4.1 ※ソースからビルド
bundle 1.15.4
Git
※ソースからビルドしている物は別の人物が担当していたため、どういう手順で行ったのかは不明。

今どうなっているか

以下のディレクトリ構成でツールプロジェクトを作成(bundle init済のソースをgit cloneする)

tools/ xxx_tool/ Gemfile example.rb [Gemfile]--------------- # frozen_string_literal: true source "https://rubygems.org" git_source(:github) {|repo_name| "https://github.com/#{repo_name}" } gem 'mysql2'

xxx_toolにて「bundle install --path vendor/bundle」実行

tools/ xxx_tool/ Gemfile Gemfile.lock example.rb vendor/

「bundle exec ruby example.rb」実行すると以下の出力がされコードの実行に失敗

Could not find mysql2-0.5.2 in any of the sources Run `bundle install` to install missing gems.

「bundle list」や「bunsle show mysql2」とやるもGemは存在する...。

[bundle show mysql2] ./tools/xxx_tool/vendor/bundle/ruby/2.4.0/gems/mysql2-0.5.2

Gemファイルは存在するしPathもあってるっぽいのになぜ実行時には「Gemのソースが見つかりません」となるのかわからない..。

試したこと

・「rm -rf ~/.gem/」でホームディレクトリに生成される.gemの削除
・.bundle/config内の「BUNDLE_DISABLE_SHARED_GEMS: 'true'」行削除
・gem パッケージのアップデート
・Gemfile.lockを削除
(bundle自体のアップデートはメインプログラムへの影響が懸念でできていない)

色々とネットに載っている解決策を試みたが現状変わらずです..。

tool自体の中身は「puts "test"」の一行のみにしても変わらずCould not.....と言われるので
bundle側のPathの方の問題なのかとも思ったのですが、思いつくところはすべて調べあげても未だ解決に至らずという状況です。

もし同じような境遇に有った方や解決策をご存じの方がいらっしゃったら是非ご教示願えないでしょうか。

追記:
上記の件について解決できました。
が、根本的な原因が分かっていないので、質問内容を変更させていただきたいと思います。

まず、今回の実行環境ですがお伝え損ねた所があります。
OSにインストールされているRubyについてはAmazonLinuxでデフォルトインストールされているRuby2.0.0とソースから手動でビルドしたRuby2.4.1が存在します。
bundle自体はRuby2.4.1にインストールしたものを使っています。

path指定せずに「bundle exec ruby example.rb」とした場合Ruby2.0.0で実行され以下のエラーが出ていたのですが

Could not find mysql2-0.5.2 in any of the sources Run `bundle install` to install missing gems.

「bundle exec /opt/local/ruby2.4.1/bin/ruby example.rb」のようにbundleを入れているRuby2.4.1を指定してあげることで期待通りに動きました。

・このようにRuby環境が複数ある場合でbundle exec rubyする際にbundleの本体が入っているRuby以外を実行した際には
プロジェクトにbundle installしたvendor/bundeのGemは見に行かないのでしょうか?
一体どこのGemを見に行ってエラーを出しているのか分からず。。

ご存じの方がいたら是非ご教示いただきたいです。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Ruby

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