質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

解決済

【Rails】rails sを実行すると「Cannot load database configuration」とエラーが出て強制終了される

kaito_program
kaito_program

総合スコア0

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

1回答

0リアクション

0クリップ

2271閲覧

投稿2020/10/05 01:38

編集2020/10/05 05:05

解決したいこと

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 sdocker-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が握っていた。

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の該当リポジトリ

エラーメッセージ全文

2つともmaster.keyとcredentials.ymlは同じもので検証。
DBの接続先が違うので、database.ymlだけ変更。

ローカル環境

database.yml

default: &default adapter: mysql2 encoding: utf8 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: root password: development: <<: *default database: mynote_development socket: /tmp/mysql.sock

エラー文

MyNote $ rails s => Booting Puma => Rails 5.2.4.2 application starting in development => Run `rails server -h` for more startup options Exiting Traceback (most recent call last): 166: from bin/rails:3:in `<main>' 165: from bin/rails:3:in `load' 164: from /Users/ohishikaido/projects/テックキャンプ/MyNote/bin/spring:15:in `<top (required)>' 163: from /Users/ohishikaido/.rbenv/versions/2.5.1/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require' 162: from /Users/ohishikaido/.rbenv/versions/2.5.1/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require' 161: from /Users/ohishikaido/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/spring-2.1.0/lib/spring/binstub.rb:11:in `<top (required)>' 160: from /Users/ohishikaido/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/spring-2.1.0/lib/spring/binstub.rb:11:in `load' # 〜中略〜 43: from /Users/ohishikaido/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/core_ext/active_support.rb:60:in `load_missing_constant' 2: from /Users/ohishikaido/.rbenv/versions/2.5.1/lib/ruby/2.5.0/erb.rb:876:in `result' 1: from /Users/ohishikaido/.rbenv/versions/2.5.1/lib/ruby/2.5.0/erb.rb:876:in `eval' (erb):43:in `<main>': Cannot load database configuration: (NoMethodError) undefined method `[]' for nil:NilClass

Docker環境

database.yml

default: &default adapter: mysql2 encoding: utf8 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: root password: development: <<: *default database: mynote_development username: root password: password host: db

エラー文

app_1

app_1 | undefined method `[]' for nil:NilClass app_1 | bundler: failed to load command: puma (/usr/local/bundle/ruby/2.5.0/bin/puma) app_1 | NoMethodError: Cannot load database configuration: app_1 | undefined method `[]' for nil:NilClass app_1 | (erb):43:in `<main>' app_1 | /usr/local/lib/ruby/2.5.0/erb.rb:876:in `eval' app_1 | /usr/local/lib/ruby/2.5.0/erb.rb:876:in `result' app_1 | /usr/local/bundle/ruby/2.5.0/gems/railties-5.2.4.2/lib/rails/application/configuration.rb:172:in `database_configuration'

マルチポストしています

・下記のstack overflowのリンクと質問内容は同じになります。
【Rails】rails sを実行すると「Cannot load database configuration」とエラーが出て強制終了される

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

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。