

# 解決したいこと

`rails s`などrails ~系のコマンドを実行すると、  
**Cannot load database configuration: (NoMethodError)undefined method []' for
nil:NilClass**  
エラーと表示されて強制終了されるので、正常に起動できるようにしたい。

エラー文から推察するとdatabase.ymlが怪しいかと思われますが、  
状況から考えて、master.keyとcredentials.ymlの関係性を疑っております。

## 自分のスキルレベル（使用言語）

・プログラミング歴7ヶ月  
・Rails歴半年（独学）

## 言葉の定義

・ローカル環境＝`rails s`で起動した環境。非Docker環境。  
・Docker環境＝`docker-compose up`で構築した環境

# その問題が発生するまでの作業手順と、詳細なエラーメッセージ

**（1〜3はあまり今回の解決したい問題とは直接関係ないかもしれません）**  
1．RailsアプリをAWSのECRとECSを利用したデプロイに挑戦していました。  
2．ローカル環境で開発したアプリをDocker化した後、`docker-compose up`で起動できるようになったのでECSにデプロイしました。  
3．デプロイはできたのですが、本番環境でおそらく「 **ActiveSupport::MessageEncryptor::InvalidMessage**
」エラーが発生しました。  
（ここは記録していなくて、ログも流れてしまい確認できないです。  
ECSの環境変数RAILS_MASTER_KEYの内容はローカル環境のmaster.keyと一致してたはずです）

4．エラーの内容から、master.keyとcredentials.ymlの暗号化問題だと判断して、両方を一度消して再生成したら解決するだろうと思い、2つを削除＆「`EDITOR=‘code
—wait’ rails credentials:edit`」で再生成しました。

5．その後、ローカル環境とDocker環境の両方とも、タイトルのエラーで起動できなくなりました。

## 自分の期待していた結果、その期待の根拠や参考資料（仮説）、実際の結果

`EDITOR='code —wait' rails
credentials:edit`（master.keyとcredentials.ymlを再生成するコマンド）を叩くと、  
ペアが一致する（master.keyの復元とcredentials.ymlの暗号化ができる）と思うのですが、`rails s`と`docker-
compose up`両方とも起動できませんでした。

でも、`EDITOR='code —wait' rails credentials:edit`を叩くと、  
なぜかcredentials.ymlは開くことができます。  
これが何故開けるのか分からないです。そもそも原因と見てる箇所が違う？

**コマンドでcredentials.ymlが開ける＝rails sができる状態** だと認識しているのですが、これがそもそも間違いなんでしょうか？  
以前にも **ActiveSupport::MessageEncryptor::InvalidMessage**
に1日ほど苦しめられた経験があるのですが、今回の原因は全く分からないです。

## 問題の発生している環境

・macOS catalina 10.15.4

### ローカル環境

・ruby 2.5.1  
・rails 5.2.4.2  
・mysql5.6

### Docker環境

・ruby 2.5.1  
・rails 5.2.4.2  
・mysql5.7

# 調査内容

エラーメッセージからmaster.keyとcredentials.ymlの関係が原因だと思いましたが、他にも原因があると思って調べました。

## Docker環境では、ローカル環境と別のmaster.keyとcredentials.ymlを用意する必要がある？

最初にmaster.keyとcredentials.ymlを削除する前は`docker-compose up`でDocker環境を構築できました。  
ですが一度削除した後に起動しなかったので、ローカル環境ではなくDocker上でcredentials.ymlを生成する必要があるのでは？と思い、`docker-
compose run -e EDITOR=vim app bundle exec rails
credentials:edit`のコマンドで生成しましたが結果は変わりませんでした。

## master.keyとcredentials.ymlを削除した状態でローカル or Docker環境で起動できるか

いずれも起動できませんでした

## 同じエラーの遭遇者

おそらくQiitaで全く同じ問題に遭遇されている方がいらっしゃいって解決策を提示していましたが、私の場合は解決に至りませんでした。  
[何度やってもNill class、原因不明のmigrate
faild、問題はcredentials.yml.encが握っていた。](https://qiita.com/Nedward/items/d9da3867af6d50e4213e)

## database.ymlの問題

別のRailsアプリで参照元のDB名を変えたりしましたが、同じエラーは再現できませんでしたので、database.ymlに問題はないと思います。

ただ、一つ気になったのが他のアプリのDBを指定しても、同じエラーが出るので今回開発してるアプリに問題があると思っています。

## `Rails s`時のmaster.keyの参照先が変わっている？

調べたところ、config/master.keyと環境変数のRAILS_MASTER_KEYどちらかを参照するみたいなので、この仮説は間違っていると思います。

下記の手順で検証しましたが、結果は変わらず上記のエラーでした。  
1．`export RAILS_MASTER_KEY="hoge"`➡️ターミナルで実行  
2．`echo $RAILS_MASTER_KEY`➡️表示結果：hoge  
3．環境変数にmaster.keyがセットされてるのを確認したので`rails s`➡️結果は変わらず

# 問題に関連している可能性のある設定やコード

・以前credentials.ymlを使用していたコードは記憶の限りだと下記の2つです。  
1．database.yml（以前EC2からRDSに接続用）➡️コメントアウト済み  
2．carrierwave.rb（S3のアクセスキーとシークレットキー）➡️使用中

ただ、調査の結果から上記の2つは関係なく、master.keyとcredentials.ymlの影響だと考えています。  
根拠は、別のRailsアプリ（同バージョン、環境）でcredentials.ymlと一致しない内容を記述しても正常に起動できること、もし一致しない場合は`rails
s`で起動後のページ表示時にエラーが発生することから、`rails s`ができない今回の問題とは別のエラーだと考えています。

## GitHubの作業ブランチのリポジトリのURLをシェア

[Githubの該当リポジトリ](https://github.com/ohishikaito/MyNote)

## マルチポストをしています

・下記のteratailのリンクと質問内容は同じになります。  
[【Rails】rails sを実行すると「Cannot load database
configuration」とエラーが出て強制終了される](https://teratail.com/questions/295996)

・マルチポストをしている理由  
転職活動や金銭面の都合で、早く問題を解決させないといけない、と言う思いからです。  
ご迷惑をおかけします。泣


CC BY-SA 4.0
2020-10-05T01:49:45.597
70916
2020-10-06T00:14:42.320
2020-10-05T03:53:19.607
42184
42184
question
ruby-on-rails ruby
rails sを実行すると「Cannot load database configuration」とエラーが出て強制終了される


自己解決しました。  
原因はdatabase.ymlのproduction環境指定欄に、コメントアウトされてるcredentials.ymlで指定してあった部分を、探そうとしてたからです。  
該当部分を削除したら、何事もなく起動しました。

[code]

    # production:
    #   <<: *default
    #   database: mynote_production
    #   username: <%= Rails.application.credentials.rds[:DATABASE_USERNAME] %>　←こいつら
    #   password: <%= Rails.application.credentials.rds[:DATABASE_PASSWORD] %>　←こいつら
    #   host: <%= Rails.application.credentials.rds[:DATABASE_HOST] %>　←こいつら
    
[/code]


CC BY-SA 4.0
2020-10-06T00:14:42.320
70942
2020-10-06T00:14:42.320
42184
70916
answer