Help us understand the problem. What is going on with this article?

Your Ruby version is 2.5.3, but your Gemfile specified 2.5.1

More than 1 year has passed since last update.

TL;DR

とある日の朝、RORのプロジェクトを開発環境で立ち上げようとしたところ、こんなエラーが吐かれた。そのデバッグ記録です。

Debug

いつものように開発環境のRORプロジェクトをgem foremanで立ち上げようとした。

$ ~/project_dir bundle exec foreman start -f Procfile.dev

ところがこんなエラーが、、

#=> Your Ruby version is 2.5.3, but your Gemfile specified 2.5.1

なるほど、参照先のruby versionとGemfileで設定しているruby versionが違うらしい。素直にGemfileのruby versionを参照先と合わせて2.5.3に設定しよう。
設定した。もう一回起動。

$ ~/project_dir bundle exec foreman start -f Procfile.dev

しかし今度は、

#=> 11:18:47 frontend.1 | exited with code 1

webpacl-dev-serverが異常終了した。なんでだ?webpack-dev-serverだけ実行してみる。

$ ~/project_dir ./bin/webpack-dev-server
#=> Your Ruby version is 2.5.1, but your Gemfile specified 2.5.3

今度は、Gemfileに設定したruby 2.5.3がだめなのか笑
bundlerとwebpack-dev-serverでrubyの参照先が違うんだろうな。

ちなみに、

$ rbenv versions
    system
    2.4.1
    2.5.0
  * 2.5.1

$ ruby -v
  ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-darwin17]

All the 2.5.1笑

一体いつどこに入れた2.5.3だろう?そういえば昨日ハイボールを飲みながらdjangoをいじってたときになんか2.5.3っていう数字を見た気も、、、まぁどうでもいいか。

Debug再開。 bundler はどこだ?

$ which bundler
#=> /usr/local/bin/bundler

中身を見てみる。

$ cat /usr/local/bin/bundle

#!/usr/local/opt/ruby/bin/ruby
#
# This file was generated by RubyGems.
#
# The application 'bundler' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'rubygems'
version = ">= 0.a"
if ARGV.first
  str = ARGV.first
  str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding
  if str =~ /\A_(.*)_\z/ and Gem::Version.correct?($1) then
    version = $1
    ARGV.shift
  end
end
if Gem.respond_to?(:activate_bin_path)
load Gem.activate_bin_path('bundler', 'bundle', version)
else
gem "bundler", version
load Gem.bin_path("bundler", "bundle", version)
end

なるほどshebangによると、参照先は #!/usr/local/opt/ruby/bin/ruby か。
rbenvでrubyのversionは管理してるし、参照先を直接変えちゃおうか。うまくいくだろう。

$ sudo vim /usr/local/bin/bundler

あなたの環境でのpathを設定してください。

#!/usr/local/.rbenv/shims/ruby #変更!
#
# This file was generated by RubyGems.
#
# The application 'bundler' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'rubygems'
version = ">= 0.a"
if ARGV.first
  str = ARGV.first
  str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding
  if str =~ /\A_(.*)_\z/ and Gem::Version.correct?($1) then
    version = $1
    ARGV.shift
  end
end
if Gem.respond_to?(:activate_bin_path)
load Gem.activate_bin_path('bundler', 'bundle', version)
else
gem "bundler", version
load Gem.bin_path("bundler", "bundle", version)
end

ではもう一度、

$ ~/project_dir bundle exec foreman start -f Procfile.dev
11:34:13 web.1      | started with pid 19518
11:34:13 frontend.1 | started with pid 19519
11:34:17 frontend.1 | Project is running at http://localhost:3035/
11:34:17 frontend.1 | webpack output is served from /packs/
11:34:17 frontend.1 | Content not from webpack is served from ***
11:34:20 frontend.1 | No parser and no filepath given, using 'babylon' the parser now but this will throw an error in the future. Please specify a parser or a filepath so one can be inferred.
11:34:20 frontend.1 | No parser and no filepath given, using 'babylon' the parser now but this will throw an error in the future. Please specify a parser or a filepath so one can be inferred.
11:34:25 web.1      | => Booting Puma
11:34:25 web.1      | => Rails 5.2.1 application starting in development 
11:34:25 web.1      | => Run `rails server -h` for more startup options
11:34:27 web.1      | Puma starting in single mode...
11:34:27 web.1      | * Version 3.12.0 (ruby 2.5.1-p57), codename: Llamas in Pajamas
11:34:27 web.1      | * Min threads: 5, max threads: 5
11:34:27 web.1      | * Environment: development
11:34:27 web.1      | * Listening on tcp://localhost:5000
11:34:27 web.1      | Use Ctrl-C to stop

お、動いた!

まとめ

お使いのrubyの参照先を確認して、各プロセスを担う方たちに適切な参照先を割り当てるようにdebugしましょう、といった感じでした:sake:

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away