767 JSON::ParserErrorが発生し、ローカルサーバーを立ち上げることが出来ない問題について
ターミナル上でrails s
コマンド入力時、
サーバー立ち上げの処理中に下記のエラーログが発生し、ローカルサーバーの立ち上げに失敗してしまうようになりました。
# 10行目より上の行は省略
10: from /Users/ito/.rbenv/versions/2.6.5/lib/ruby/2.6.0/tsort.rb:228:in `block in tsort_each'
9: from /Users/ito/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/railties-6.0.3.3/lib/rails/initializable.rb:61:in `block in run_initializers'
8: from /Users/ito/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/railties-6.0.3.3/lib/rails/initializable.rb:32:in `run'
7: from /Users/ito/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/railties-6.0.3.3/lib/rails/initializable.rb:32:in `instance_exec'
6: from /Users/ito/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/webpacker-4.3.0/lib/webpacker/railtie.rb:84:in `block in <class:Engine>'
5: from /Users/ito/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/webpacker-4.3.0/lib/webpacker.rb:35:in `bootstrap'
4: from /Users/ito/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/webpacker-4.3.0/lib/webpacker/commands.rb:25:in `bootstrap'
3: from /Users/ito/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/webpacker-4.3.0/lib/webpacker/manifest.rb:18:in `refresh'
2: from /Users/ito/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/webpacker-4.3.0/lib/webpacker/manifest.rb:84:in `load'
1: from /Users/ito/.rbenv/versions/2.6.5/lib/ruby/2.6.0/json/common.rb:156:in `parse'
/Users/ito/.rbenv/versions/2.6.5/lib/ruby/2.6.0/json/common.rb:156:in `parse': 767: unexpected token at '' (JSON::ParserError)
ひとまずエラー内容を読んだところ、
parse': 767: unexpected token at '' (JSON::ParserError)
の表示に着目。これは一体何ごと?と思い、解決策を模索していきます。
調べた内容と仮説
とりあえずJSON::ParserErrorで検索した次第ですが、ドンピシャな情報は中々見つかりません。
そんな中、下記サイトの情報が一筋の光明となりました。
開発者モードのブログ:rails 6 貴重な午後の4時間を浪費
・・・ここで落ちてる。辿ってみたら、public/packsの下に manifest.jsonというファイルが出来ていて、これが空だった。固まった際にこのファイルを作りに行ったに違いない。そこで強制リセットしたから、空のままになってしまい、それで JSON-ParseErrorが出たみたいだ。このファイルを消したら、動いた。良かった。
ふむ、要するにruby用のファイル自体が壊れてしまっていると…
思い返してみれば、ローカルサーバーの処理中にControl + C
でサーバーを強制終了させた覚えがあったので、
上記の症状と同様、manifest.rb
が壊れてしまっているのではないかと仮説を立てて、
manifest.rb
を別のディレクトリ(デスクトップとか)に退避させ読み込まれないようにしてみました。
その結果
仮説と調べた内容より、ひとまずmanifest.rb
を別のディレクトリ(デスクトップ)に退避させて再びrails s
を実行。
すると、下記の通りの結果が返されました。
/Users/ito/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/bootsnap-1.4.8/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:
in `require': cannot load such file --
/Users/ito/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/webpacker-4.3.0/lib/webpacker/manifest.rb (LoadError)
・・・まあ、こうなるだろうなとは思っていましたが、ここで再び暗黒座礁に乗り上げてしまいショック。
manifest.rb
を読み込まさせなければ解決する、という訳では無かったようです。
そもそも自動生成されるものじゃないみたいだし
これ以上ネットで調べても有効な解決策が見つかりそうもなかったため、
TECKCAMPのメンターさんに質問をすることに。
未知の暗黒領域で起きてるエラーのことなぞ自力で解決するには無理がある。
が・・・・・・、駄目っ・・・・・・!
メンターさんにも解決策不明なバグだった。
色々していただいた所申し訳ないですが、自機Mac Bookの動作が重たくなりすぎたのでここで一旦休憩に。
もうヤンナルネ。
そして解決
もう一度開発者モードのブログ:rails 6 貴重な午後の4時間を浪費の内容を見返してみる。
・・・public/packsの下に manifest.jsonというファイルが出来ていて・・・
**ん?**よく見たらmanifest.rb
を消せとは一言も言ってないじゃないか!
では早速ディレクトリを確認。中身が空のmanifest.rb
が・・・ある!
wkwkしながらmanifest.rb
を削除。
結果、ローカルサーバーは見事に復活しました。めでたしめでたし
原因は**作業中のRailsアプリのpublic/packsディレクトリ内にあるmanifest.json
**でした。
参考ブログにそう書いてあったのになんで見落とすかな。Rubyのファイルは別に壊れてなかったね。
自信の読解力に慄きつつ、これで767 JSON::ParserError
を解決したのでした。
3時間無駄にした…もうControl + C
は軽々しく使わない…