タイトルの通りですが、今回は
ERROR: In file ./.env: environment variable name 'THOR_SILENCE_DEPRECATION ' may not contain whitespace.
というエラーが出た際の対処法について、私の環境下でのソリューションを共有したいと思います。
私はRuby on Railsでプログラミング学習を開始して1ヶ月ほどの初学者ですので、至らない点や説明不足の点等もあるかと思います。
お気づきの点等ございましたらご指摘いただけると幸いです。
※できるだけ初学者の方にも分かりやすく説明する事を心がけているため、やや冗長に感じる部分もあるかもしれませんがご了承くださいませ。
#環境
・Ruby 2.6.5
・Rails 5.2.3
・MySQL 5.7
・Docker
・Dokcer-compose version: '3'
#まずは解決した方法から
早速ですが解決方法から述べたいと思います。
私の環境下では、ルートディレクトリ
(DockerfileやGemfile等のファイルと同じ階層)
に存在する.envファイルの記述が間違っていた事が原因でした。
#こちらがエラーが出てしまう記述
THOR_SILENCE_DEPRECATION = true
#以下の記述に修正すればエラーは解消される
THOR_SILENCE_DEPRECATION=true
エラーが出てしまう記述では、余計な空白が入ってしまっていますね。
空白を除去する事で、上記エラーは解消されます。
#エラーの深掘り
エラーの内容を再度見てみましょう。
ERROR: In file ./.env: environment variable name 'THOR_SILENCE_DEPRECATION ' may not contain whitespace.
こちらの文章をGoogle翻訳で日本語に修正してみると、
エラー:ファイル./.env:環境変数名 'THOR_SILENCE_DEPRECATION'に空白が含まれていない可能性があります。
と変換されます。
日本語としては若干分かりづらいのですが、なんとなく
「空白の関係でエラーが出ているのだな」
とアタリをつける事ができます。
エラー文本文でググってみると、完全に同じエラー文が出てきた方はいらっしゃいませんでしたが、解決にあたっては以下のブログを参考にさせていただきました。
Composerで.env内のスペースはクォートで囲む必要があるエラーが発生
https://awesome-linus.com/2019/04/07/composer-install-error-need-quotes/
エラー文でググったところ情報が少なかったため、おそらくそう頻繁に出るエラーではないのだと予測できますが、初学者の方がエラーに遭遇した際の一つのソリューションとして参考になれば幸いです。
#エラーが起きた背景を詳しく
エラーが起きた背景について、もう少し詳しく記述していきます。
このエラーは「.envファイル」の記述が間違えているのが原因なのですが、そもそも.envファイルを触った事がないという方もいらっしゃるかも知れません。
私も約1ヶ月ほどRailsを勉強してきた中で、.envファイルを触る機会というのは一度もなかったのですが、ログイン機能を実装するGem「sorcery」を導入する過程で、以下のエラーを解決するために.envファイルを触る必要が出てきました。
Deprecation warning: Expected string default value for '--test-framework'; got false (boolean).
This will be rejected in the future unless you explicitly pass the options `check_default_type: false` or call `allow_incompatible_default_type!` in your code
You can silence deprecations warning by setting the environment variable THOR_SILENCE_DEPRECATION.
こちらのエラーは、
・Gemfileにsorceryを追加
・bundle install
・sorceryを使用するためのコマンド「rails g sorcery:install」を実行
という過程の中で発生したものです。
エラーの詳細については私もよく分かってはいないのですが、どうやらシェルスクリプトを生成するためのGemからエラーが出ているらしいとのこと。
このエラーを解決するための方法として、.envファイルに
#正しい記述
THOR_SILENCE_DEPRECATION=true
の記述を追加する必要があり、
誤って以下のコードを記述。
#不要な空白があるためエラーが出る記述
THOR_SILENCE_DEPRECATION = true
そして、rails g controller ~~
を実行しようとしたところ、タイトルのエラーが発生したという経緯です。
ちなみに、「Deprecation warning〜〜〜」のエラーに関しては、以下の記事
[Ruby on Rails]環境変数の設定方法(.bash_profile、Dotenv-rails)
https://qiita.com/yuichir43705457/items/7cfcae6546876086b849
RSpecを導入する
https://qiita.com/d0ne1s/items/1ecd114b33e80058215f
を参考に解決する事ができました。
ありがとうございました。
#おしまい
以上が、今回のエラーの解決方法と周辺情報です。
あまり情報が多くないエラーでしたので、もし遭遇して困っている方は参考にしていただけると幸いです。
また、説明が分かりづらい点等があれば、ご指摘いただければと思います。
それでは、最後までお付き合いいただきありがとうございました。