rails server でちゃんと終了できていなかった時のこと。

はじめに

現在FBCにて、Railsのプラクティスにいよいよ取り組んでいます。
Railsの教科書にチャレンジしていますが、その中で起きたエラー内容についてちょっと調査してみました。

tatsu-zine.com

エラー:

f:id:Barnum:20211110192418p:plain
エラー
NameError in BooksController#show
uninitialized constant Book::PictureUploader
Extracted source (around line #2):
1
2
3
              
class Book < ApplicationRecord
  mount_uploader :picture, PictureUploader
end

Rails.root: /Users/myMBP/work/sandbox/my_web_apps/books_app

Application Trace | Framework Trace | Full Trace
app/models/book.rb:2:in `<class:Book>'
app/models/book.rb:1:in `<main>'
app/controllers/books_controller.rb:62:in `set_book'
Request
Parameters:

uninitialized constant とは

エラー内容:
qiita.com

> Book::PictureUploader
を定義していない旨のエラーが出ていました。

ただし、本を写経していたので、タイポでも無い限り間違いであるはずがないと確信していたので、どうしたものかと悩んでいました。
※本自体は、他の受講生が多数クリアしていたので。

エラー名で検索してみる

下記の様に命名規則違反でも、当エラーが発生するようです。

【Rails】uninitialized constant UsersController というエラーが出たときの対処法 | FREE SWORDER


またジャストのエラー文言かぶりでしたが、こちらでも解消せず。

Railsチュートリアル中にNameError: uninitialized constant Micropost::PictureUploaderが出た時の対処法 - Qiita


spring stop
spring ってなんなんだ
> Spring は Rails アプリケーションの preloader(プリローダー)の gem です。Rails アプリケーションをバックグラウンドで走らせたままにしておくことにより(pre + load = 前もってロードしておく)、bin/rails や bin/rake コマンドの2回目以降の起動時間が短縮されます。


qiita.com

原因

そもそもサーバー起動時に、下記画像の文言が出ており、


f:id:Barnum:20211110200723p:plain

サーバーの停止がうまくいっていなかった模様。
そこでサーバー停止について、調べる。


qiita.com


> cat tmp/pids/server.pid

.pidふぁいるとは


f:id:Barnum:20211110195404p:plain


そして、killしてから立ち上げてみる。


f:id:Barnum:20211110200824p:plain


成功!

じゃあ、なんでサーバー起動が正常でない時のエラーがモデルについてのエラーなのか

uninitialized constant とは何なのかに立ち返る。

qiita.com


> クラスの読み込みが上手くいっていない。
rubyファイルを実行した時にrails sした直後は実行時点でクラスを読み込んでいないので、app/models/user.rbファイルを探しにいく。
app/models/user.rbというファイルがあれば、ファイルをオープンしてクラスを読み込む
しかし、app/models/user.rbというファイルがない、ファイルの中にUserというクラスが定義されていない場合、uninitializedエラーが起きる

ここでいう、user.rbが、book.rbである。
Railsには、標準でPumaというWebサーバが付随しています。
サーバーからアクセスするも→book.rbが読み込めない→ファイルの定義間違えてない?というエラーになる。


参考記事:

サーバー立ち上げの時の文言をしっかり見ていたら、
ここにたどり着けたはず。いつも勉強になります。

k-koh.hatenablog.com


しっかりエラーハンドリングまで載っているサイト。
大変参考になります。

pikawaka.com