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

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してみたり

 

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

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

 

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

 

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

 

  • 上のように既存アプリでは:Rails4.2.6 、  新規アプリではRails5.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’     ここの記述を以下に書き換える gemrails, ‘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 する必要がある。  
引用元: 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実行

すると…

~>  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 でググる

qiita.com

 

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

  ~> 無事表示できた!!

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

 

まとめ

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

エラーに1つ遭遇するたびに勉強になるし、

解決すれば2倍も3倍も勉強になる。 なのでエラーもっと食べたいw

 

 

学んだこと: Gemfile.lockはやたら削除しちゃダメ

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

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

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

 

 

その他参考記事:

qiita.com

blowitech.hatenablog.jp

qiita.com

 

Qiita記事だらけになったw

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