バージョン切り替えたらrails sできなくなった時に試してみたこと
移転しました。3秒後に移転先へ移動します。
Railsのバージョンを切り替えて新しいアプリを作成したら、今まで作ったアプリで rails sができなくなったときのエラー解決手順。
個人的には永久保存版(笑)。
色々試しても効果なしでドハマりしてましたが、無事解決できてよかった(;'∀')
今後もrails sできなくなったらここに来て復習しようっと^^
エラー内容:rails sがうまくいかずサーバー起動ができない。
stack level too deep(SystemStackError)
エラー文はこんな感じ。
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はできてるみたいだけど。。
他にも
・ブランチを前のコミットまで戻したり(SourceTreeで操作)、
・リポジトリからcloneして別の場所に置き、cloneした方でrails sしてみたり
…なども試してみましたが結果はほぼ同じで、サーバー起動できませんでした。。
(゚Д゚≡゚Д゚)アワアワ
エラー直前までの自分の操作を思い出す
自分の操作と現状の確認:
- 新しいアプリを作成しようと、rbenvでRailsのバージョンを切り替えてrails newした
(ターミナルで)
rails new _5.2.0_ NEW APP (-d mysql)
既存アプリ:Rails4.2.6 / 新規アプリ:5.2.0 (Rubyはどちらも2.5.0)
他の既存アプリでRails5系もあり、今までは4系5系どちらも作動していた。
”bundle installせよ”と出る→bundle installしたけどrails sできない!
- 新規アプリでは起ち上げとサーバー起動は問題なし
(既存アプリのうちRails5系で作動できていたアプリ含む)
解決と試行錯誤の手順
既存アプリ4.2.6のバージョンを変更してみることに。
アプリのバージョンを途中で変更するには…ふむふむ
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を実行すると…
…なんかうまくいってないっぽい;
続けて
bin/rails app:update
を実行してみたけどやっぱり先には進まない。。
- エラー文bundle could not find compatible versions for gemでググる↓
bundle update rails が完了できるまで頑張る。
バージョンの競合とかで色々、エラーになって進まないので、ひたすら、バージョンの整合性を整えつつ、update する gem を追加していく。 (中略)
上記の例だと、seed_fu が activerecord の5.0.0以上のものを利用しているバージョンまで update する必要がある。
引用元:
うーむ…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実行
すると…
~> 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実行
すると……お?!
bundle installうまくいってるっぽい!!!
Gemfile.lockも生成されました(;・∀・)ホッ…
―――――― だがまだ終わりではなかったのだ―――――――
~> rails sはできたけどコントローラーで以下のエラーが発生(Argement Error)
コントローラーにこんな記述してないんだが…?(゚∀゚;)
Rails5.0.1にしてbundle update => ついにエラー回避!!
最終的には以下の方法でこのエラーも回避できました。
- エラー文 key must be 32 bytes でググる
- 記事参考にGemfileでrails 5.0.1にして bundle update実行
~> 無事表示できた!!
ヤタ━━━━━━ヽ(´∀`*)ノ ━━━━━━!!!!
まとめ
サーバー起動できなくて本当にどうなるかと思いましたが、諦めずに取り組んでよかったです!
エラーに1つ遭遇するたびに勉強になるし、解決すれば2倍も3倍も勉強になる。
なのでエラーもっと食べたいw
学んだこと:
Gemfile.lockはやたら削除しちゃダメw
ちなみに今回の過程で、他にも1~2個エラーが出ました。
コード合ってるはずなのにSyntaxErrorと言われ、そういえば!と思って自分の過去記事を見たら載ってましたよw
いや~書いててよかったなぁ~^^
その他参考記事:
Qiita記事だらけになったw
ここまで読んでくださり、ありがとうございました^^