guache
@guache (郡司 いたみ)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

【Ruby on rails】rubyのバージョン変更中にエラーが出ます

Q&A

Closed

Qiita・プログラミング初心者です。
至らぬことが多いですが、よろしくお願いします。

実行環境

ruby 2.6.3(→3.1.2)
Rails 6.1.6.1
AmazonのEC2、RDS、デプロイにPumaとNginxを利用しています。

解決したいこと

Ruby on Railsでコミュニティサイト風のWebアプリを制作中です。
EC2にログインしてrails sをすると下のようなメッセージが出て、アプリケーションの起動ができなくなっていました。

rbenv: rails: command not found

The `rails' command exists in these Ruby versions:
  3.1.2

元々アプリの制作はrubyのバージョン2.6.3で行っていましたが、この機会に3.1.2に変更しようとしたところ、別のエラーメッセージが出るようになってしまいました。

問題のエラーメッセージ

Your Ruby version is 3.1.2, but your Gemfile specified 2.6.3

ローカルで行ったこと

・使用するrubyのバージョンを3.1.2に変更

$ rvm --default use 3.1.2

・Gemfileの記述を変更

Gemfile
source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }

ruby '3.1.2'#ここを2.6.3から3.1.2に

・.ruby-versionの記述の変更

.ruby-version
ruby-3.1.2

その後bundle installを実行。(ローカルでは)rails sも問題なく実行できました。

EC2にログインして行ったこと

[ec2-user@ip-172-31-92-112 ~~~]$ rbenv install 3.1.2
[ec2-user@ip-172-31-92-112 ~~~]$ rbenv local 3.1.2
[ec2-user@ip-172-31-92-112 ~~~]$ bundle install

2行目はrbenv globalだと何の反応もなかったためlocalとしています。bundle installを実行すると、通常表示される情報の前に

/home/ec2-user/.rvm/gems/ruby-3.1.2/gems/bundler-1.17.3/lib/bundler/shared_helpers.rb:29: warning: Pathname#untaint is deprecated and will be removed in Ruby 3.2.
/home/ec2-user/.rvm/gems/ruby-3.1.2/gems/bundler-1.17.3/lib/bundler/shared_helpers.rb:118: warning: Pathname#untaint is deprecated and will be removed in Ruby 3.2.
/home/ec2-user/.rvm/gems/ruby-3.1.2/gems/bundler-1.17.3/lib/bundler/shared_helpers.rb:118: warning: Pathname#untaint is deprecated and will be removed in Ruby 3.2.
/home/ec2-user/.rvm/gems/ruby-3.1.2/gems/bundler-1.17.3/lib/bundler/shared_helpers.rb:118: warning: Pathname#untaint is deprecated and will be removed in Ruby 3.2.
/home/ec2-user/.rvm/gems/ruby-3.1.2/gems/bundler-1.17.3/lib/bundler/shared_helpers.rb:118: warning: Pathname#untaint is deprecated and will be removed in Ruby 3.2.
/home/ec2-user/.rvm/gems/ruby-3.1.2/gems/bundler-1.17.3/lib/bundler/shared_helpers.rb:35: warning: Pathname#untaint is deprecated and will be removed in Ruby 3.2.
/home/ec2-user/.rvm/gems/ruby-3.1.2/gems/bundler-1.17.3/lib/bundler/shared_helpers.rb:35: warning: Pathname#untaint is deprecated and will be removed in Ruby 3.2.
/home/ec2-user/.rvm/gems/ruby-3.1.2/gems/bundler-1.17.3/lib/bundler/shared_helpers.rb:35: warning: Pathname#untaint is deprecated and will be removed in Ruby 3.2.
/home/ec2-user/.rvm/gems/ruby-3.1.2/gems/bundler-1.17.3/lib/bundler/shared_helpers.rb:44: warning: Pathname#untaint is deprecated and will be removed in Ruby 3.2.
/home/ec2-user/.rvm/gems/ruby-3.1.2/gems/bundler-1.17.3/lib/bundler/shared_helpers.rb:118: warning: Pathname#untaint is deprecated and will be removed in Ruby 3.2.
/home/ec2-user/.rvm/gems/ruby-3.1.2/gems/bundler-1.17.3/lib/bundler/shared_helpers.rb:118: warning: Pathname#untaint is deprecated and will be removed in Ruby 3.2.
/home/ec2-user/.rvm/gems/ruby-3.1.2/gems/bundler-1.17.3/lib/bundler/shared_helpers.rb:118: warning: Pathname#untaint is deprecated and will be removed in Ruby 3.2.
/home/ec2-user/.rvm/gems/ruby-3.1.2/gems/bundler-1.17.3/lib/bundler/shared_helpers.rb:35: warning: Pathname#untaint is deprecated and will be removed in Ruby 3.2.
/home/ec2-user/.rvm/gems/ruby-3.1.2/gems/bundler-1.17.3/lib/bundler/shared_helpers.rb:44: warning: Pathname#untaint is deprecated and will be removed in Ruby 3.2.
The dependency tzinfo-data (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for ruby but the dependency is only for x86-mingw32, x86-mswin32, x64-mingw32, java. To add those platforms to the bundle, run `bundle lock --add-platform x86-mingw32 x86-mswin32 x64-mingw32 java`.

不穏なメッセージが表示されましたが、私の理解が追い付いていないため保留に。
rubyのバージョンを確認すると

[ec2-user@ip-172-31-92-112 ~~~]$ rbenv versions
  2.6.3
* 3.1.2 (set by /home/ec2-user/~~~/.ruby-version)

3.1.2へ切り替え自体は出来ていたようなので、
rails -vを試してみると

[ec2-user@ip-172-31-92-112 ~~~]$ rails -v
/home/ec2-user/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/bundler-1.17.3/lib/bundler/shared_helpers.rb:29: warning: Pathname#untaint is deprecated and will be removed in Ruby 3.2.
/home/ec2-user/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/bundler-1.17.3/lib/bundler/shared_helpers.rb:118: warning: Pathname#untaint is deprecated and will be removed in Ruby 3.2.
/home/ec2-user/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/bundler-1.17.3/lib/bundler/shared_helpers.rb:118: warning: Pathname#untaint is deprecated and will be removed in Ruby 3.2.
/home/ec2-user/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/bundler-1.17.3/lib/bundler/shared_helpers.rb:35: warning: Pathname#untaint is deprecated and will be removed in Ruby 3.2.
/home/ec2-user/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/bundler-1.17.3/lib/bundler/shared_helpers.rb:44: warning: Pathname#untaint is deprecated and will be removed in Ruby 3.2.
/home/ec2-user/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/bundler-1.17.3/lib/bundler/shared_helpers.rb:35: warning: Pathname#untaint is deprecated and will be removed in Ruby 3.2.
/home/ec2-user/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/bundler-1.17.3/lib/bundler/shared_helpers.rb:44: warning: Pathname#untaint is deprecated and will be removed in Ruby 3.2.
/home/ec2-user/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/bundler-1.17.3/lib/bundler/shared_helpers.rb:118: warning: Pathname#untaint is deprecated and will be removed in Ruby 3.2.
/home/ec2-user/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/bundler-1.17.3/lib/bundler/shared_helpers.rb:35: warning: Pathname#untaint is deprecated and will be removed in Ruby 3.2.
/home/ec2-user/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/bundler-1.17.3/lib/bundler/shared_helpers.rb:35: warning: Pathname#untaint is deprecated and will be removed in Ruby 3.2.
/home/ec2-user/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/bundler-1.17.3/lib/bundler/shared_helpers.rb:44: warning: Pathname#untaint is deprecated and will be removed in Ruby 3.2.
/home/ec2-user/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/bundler-1.17.3/lib/bundler/shared_helpers.rb:118: warning: Pathname#untaint is deprecated and will be removed in Ruby 3.2.
Your Ruby version is 3.1.2, but your Gemfile specified 2.6.3

先ほど保留した警告メッセージと似た文章と、Your Ruby version is 3.1.2, but your Gemfile specified 2.6.3と表示されてしまいました。バージョンの設定を変更ができていない部分がまだある、ということだと思うのですが、その方法がわかりません。

2.6.3のままでは埒が明かなかったため、3.1.2に統一してrailsコマンドを実行するのが現在の目標です。
解決方法やアドバイスなどご教示いただけると幸いです。

0

2Answer

Comments

  1. @guache

    Questioner

    アドバイスいただき有難うございます!
    今しがたローカルの変更をpushした後
    [ec2-user@ip-172-31-92-112 ~~~]$ git pull origin main
    を実行したところ、
    remote: Enumerating objects: 9, done.
    remote: Counting objects: 100% (9/9), done.
    remote: Compressing objects: 100% (1/1), done.
    remote: Total 5 (delta 3), reused 5 (delta 3), pack-reused 0
    Unpacking objects: 100% (5/5), 473 bytes | 23.00 KiB/s, done.
    From github.~~~/~~~
    * branch main -> FETCH_HEAD
    7641b35..c9ff95d main -> origin/main
    error: Your local changes to the following files would be overwritten by merge:
    .ruby-version
    Please commit your changes or stash them before you merge.
    Aborting
    Merge with strategy ort failed.
    一部失敗しているようでした。
    c9ff95dが今いる所で、7641b35は一つ前の場所でした。
    また、railsコマンドを試してみると
    Your Ruby version is 3.1.2, but your Gemfile specified 2.6.3のままでした。

追記のエラーを見るに、最初の質問の原因は
「ローカルの変更をリモートに反映していないから」になりますね。

ローカルでは確かに
Gemfile及び.ruby-versionを変更しているかもしれませんが
それをデプロイしなければリモートは2.6.3のままです。

追記されたエラーについて
pullしようとしている側(EC2)側で.ruby-version
変更を加えていたりしませんか。

■原文
error: Your local changes to the following files would be overwritten by merge:
.ruby-version
Please commit your changes or stash them before you merge.

■翻訳
エラーが発生しました。以下のファイルに対するあなたのローカルな変更は、マージによって上書きされます。
.ruby-version
変更をコミットするか、マージする前に隠しておいてください。

上記の「隠しておいてください」というのは
git stashコマンドを使用して変更を
退避しておいてください、ということです。(詳しくは調べてみてください)
一応、参考リンクを貼っておきます。

恐らくですが、

[ec2-user@ip-172-31-92-112 ~~~]$ rbenv install 3.1.2
[ec2-user@ip-172-31-92-112 ~~~]$ rbenv local 3.1.2
[ec2-user@ip-172-31-92-112 ~~~]$ bundle install

これらのコマンドを実行した際に
リモート側のファイルに変更が加えられたため、
「pullしようとしているのに変更中のファイルがあります(ざっくり)」と言われています。

3年以上前の情報になってしまいますが、
こちらの記事が参考になります。

※公式ドキュメントではなく、
かつ強制的に上書きする手法も記載されているので安易にコマンドを実行せず
ご自身で調べて意味を理解してから実行するようにしてください。

0Like

Comments

  1. @guache

    Questioner

    有難うございます!
    自分が何をしているのか、ちゃんと理解しながらでないと駄目ですね。
    紹介していただいた記事を読んで、よく調べてから挑戦しようと思います!

Your answer might help someone💌