##「rails g uploader Image」でエラー発生
ruby > 2.6.5
rails > 5.2.4.2
devise > 4.7.1
carrierwave > 2.1.0
gem 'devise'
のプロフ画像アップロードのために
gem 'carrierwave'
を設定中、
アップローダーを作成するコマンドrails g uploader Image
でエラーが出ました。
$ rails g uploader Image
Running via Spring preloader in process 65446
Could not find generator 'uploader'. Maybe you meant 'mailer', 'task' or 'helper'
Run `rails generate --help` for more options.
直訳するとこうなりますね
プロセス65446のSpringプリローダーを介して実行
ジェネレータ「アップローダー」が見つかりませんでした。多分あなたは「メーラー」、「タスク」または「ヘルパー」を意味しました
その他のオプションについては、'rails generate --help'を実行してください。
uploader
が使えないということは、CarrierWave自体に問題があるのか、インストールが上手く行っていないのか…
##ググって原因を調査
数記事ヒットしましたが、すべて未解決でした。
Rails 5, Carrierwave. Could not find generator 'uploader'
carrierwave をインストール後、rails g uploader Pictureで「Could not find generator 'uploader'」
rails g uploader~ エラー 対処法
最新のCarrierWaveは不安定という話もあったので、バージョンを下げた。
→ダメ
諸々を再起動してから再インストールしてみたりインストール方法を変えてみたり。
→ダメ
「そもそもCarrierWaveよりActive Storageのほうが良い」という言葉に惑わされる
→そういう問題じゃない
万策尽きました…
##エラーの問題は「Carrierwave」ではなかった!
一呼吸置き、再度エラーに目を向けると
Running via Spring preloader in process 65446
#以下略
こんなエラー出てたっけ?(出てました)
この文字列で調べたら一瞬で解決しました。
##「Spring Stop」で解決
spring
経由で実行していたことが原因だったようです。
$ spring stop
のコマンドでspring
を経由せずにコマンドを実行したら行けました。
参考
Running via Spring preloader in process. Could not find generator 'devise'の原因と解決策
$ spring stop
Spring stopped.
あとは、例のコマンドを実行すれば完了です。
$ rails g uploader Image
###そもそも「Spring」とは?
ざっくり直訳すると
アプリケーションのプリローダーです。
アプリケーションをバックグラウンドで実行し続けることで開発をスピードアップし、テスト、rakeタスク、または移行を実行するたびにアプリケーションを起動する必要がなくなります。
つまり、コマンドをスムーズに動かすために裏で動いているプリローダーということのようです。
便利な機能だけど、たまに悪さをするから、そのときはspring stop
と解釈しました!
##まとめ
エラーが出たらググれば良いというわけではないなと痛感しました。
エラー文をよく読んで、なにが問題と言っているのかを把握してググる必要がありますね。
そしてspring stop
の理解はかなり大きな産物でした!