のじしお@プログラミングがんばる

田舎でも車なくてもやっていける話とか、プログラミング学習の備忘録とか。いいタイトルが思いつかないんだ…;;まずは書いて、あとから随時手入れをば。

バージョン切り替えたらrails sできなくなった時に試してみたこと

 Railsのバージョンを切り替えて新しいアプリを作成したら、今まで作ったアプリで rails sができなくなったときのエラー解決手順。

 個人的には永久保存版(笑)。

  

色々試しても効果なしでドハマりしてましたが、無事解決できてよかった(;'∀')

今後もrails sできなくなったらここに来て復習しようっと^^

 

 

 

エラー内容:rails sがうまくいかずサーバー起動ができない。

stack level too deep(SystemStackError)

 エラー文はこんな感じ。

f:id:piyomaru-bunbun:20180706225513p:plain

stack level too deepとは?うーん…調べてみたけど、このアプリでコードは変更していないので別の原因だろうなぁ…

 

試したけど今回は効果がなかった方法

 

ちなみに他のブランチに切り替えたらどうなる?ということで、切り替え後にrails sすると

 

"bundle installせよ"とのメッセージが出る。

Could not find autoprefixer-rails-8.4.0 in any of the sources
Run `bundle install` to install missing gems.

 

で、仰せの通りにbundle installしてからrails sしたけどやっぱり失敗。

bundle installはできてるみたいだけど。。

f:id:piyomaru-bunbun:20180706230107p:plain

 

 

他にも

・ブランチを前のコミットまで戻したり(SourceTreeで操作)、

リポジトリからcloneして別の場所に置き、cloneした方でrails sしてみたり

 

…なども試してみましたが結果はほぼ同じで、サーバー起動できませんでした。。

(゚Д゚≡゚Д゚)アワアワ

  

エラー直前までの自分の操作を思い出す

 自分の操作と現状の確認:

     (ターミナルで)

   rails new _5.2.0_ NEW APP (-d mysql)

  •  このときのRailsのバージョンは、  

f:id:piyomaru-bunbun:20180707174423p:plain

       既存アプリ:Rails4.2.6  /  新規アプリ:5.2.0 (Rubyはどちらも2.5.0)

  他の既存アプリでRails5系もあり、今までは4系5系どちらも作動していた。

 

  • 一度サーバーを切り、4.2.6の方でrails sしたら上記のように

        ”bundle installせよ”と出る→bundle installしたけどrails sできない!

 

  • 新規アプリでは起ち上げとサーバー起動は問題なし
  • 今回のrails sエラーにより、新規アプリ以外のすべてのアプリがサーバー起動できなくなった

  (既存アプリのうちRails5系で作動できていたアプリ含む)

  

解決と試行錯誤の手順

 既存アプリ4.2.6のバージョンを変更してみることに。

アプリのバージョンを途中で変更するには…ふむふむ

qiita.com

Railsのバージョンを4.2.6~>5.2.0に変更してみる =>gemのバージョン競合発生

 ↑記事を参考にRailsバージョンを4.2.6~>5.2.0に変更してみる

(新規アプリが5.2.0だったので合わせてみた)

 

まず

  • Gemfileの記述を変更する

          gem 'rails', '4.2.6'     ここの記述を以下に書き換える

          gem
'rails', '5.2.0'

 

  • 次にbundle update railsを実行すると…

 

f:id:piyomaru-bunbun:20180707180128p:plain

…なんかうまくいってないっぽい;

 

続けて

bin/rails app:update

を実行してみたけどやっぱり先には進まない。。

 

 

  • エラー文bundle could not find compatible versions for gemググる

 

bundle update rails が完了できるまで頑張る。

バージョンの競合とかで色々、エラーになって進まないので、ひたすら、バージョンの整合性を整えつつ、update する gem を追加していく。 (中略)
上記の例だと、seed_fu が activerecord の5.0.0以上のものを利用しているバージョンまで update する必要がある。

 

引用元:

Rails 5へのアップグレードでやったこと。 

  

qiita.com

うーむ…gemのいくつかが競合している??

それって1つ1つバージョン合わせないとだめなのか??(;'∀')

ハードル高いな…ひとまずこれは保留。別の方法ないだろうか。。

 

Gemfile.lockファイルを削除してみた =>さらに泥沼化www

以前別のエラーと格闘してたときに「Gemfile.lockを削除してから云々」という方法をとったことを思い出したので軽い気持ちで特攻したら更にエラーを生んだw

 

  • Gemfile.lockを削除してからbundle update railsを実行
  • " Run 'bundle install' "と言われるのでbundle installを実行
  • 先ほどと同じ(bundle could not find compatible~)文言が出る。

   ~>とりあえずbin/rails app:update実行

  

すると…

f:id:piyomaru-bunbun:20180707210758p:plain

 

~>  Gemfile.lockがないよというメッセージが出る。

~>  bundle installしてもGemfile.lockが生成されず、bundle could not find compatible~

が現れる

~>     詰      ん       だ     \(^o^)/

 

Rails5.0.0にしてみる =>一応rails s成功!コントローラーでエラー発生!

今度はRailsのバージョンを5.0.0にしてみたら、とりあえずサーバー起動はできました!

 

  • Gemfileの記述、gem "rails", "5.0.0"に変更する
  • 再びbundle update rails ~> ”bundel installせよ”と言われる
  • bundle install実行

 

すると……お?!

f:id:piyomaru-bunbun:20180707194812p:plain

 

bundle installうまくいってるっぽい!!!

f:id:piyomaru-bunbun:20180707201010p:plain

Gemfile.lockも生成されました(;・∀・)ホッ…

 

―――――― だがまだ終わりではなかったのだ―――――――

 

 ~> rails sはできたけどコントローラーで以下のエラーが発生(Argement Error)

f:id:piyomaru-bunbun:20180707201425p:plain

コントローラーにこんな記述してないんだが…?(゚∀゚;)

 

Rails5.0.1にしてbundle update => ついにエラー回避!!

最終的には以下の方法でこのエラーも回避できました。

 

  • エラー文 key must be 32 bytes でググる

qiita.com

  • 記事参考にGemfilerails 5.0.1にして bundle update実行

 

~> 無事表示できた!!

ヤタ━━━━━━ヽ(´∀`*)ノ ━━━━━━!!!!

 

 

まとめ

サーバー起動できなくて本当にどうなるかと思いましたが、諦めずに取り組んでよかったです!

 

エラーに1つ遭遇するたびに勉強になるし、解決すれば2倍も3倍も勉強になる。

なのでエラーもっと食べたいw

 

 

学んだこと:

Gemfile.lockはやたら削除しちゃダメ

 

 

 

ちなみに今回の過程で、他にも1~2個エラーが出ました。

コード合ってるはずなのにSyntaxErrorと言われ、そういえば!と思って自分の過去記事を見たら載ってましたよw

いや~書いててよかったなぁ~^^

nojishio-notes.hatenablog.com

 

その他参考記事:

qiita.com

blowitech.hatenablog.jp

qiita.com

 

Qiita記事だらけになったw

ここまで読んでくださり、ありがとうございました^^

広告を非表示にする