2017-01-28 11 views
2

私は中間的なRailsの開発者であり、本番環境では私の唯一の接続としてリモートデータベースを使用しています。私のスタックはRails 5とRuby 2.4.0です。私はすでにUSERNAMEやPASSWORDのようなデータベースの環境変数を設定しています。私はHerokuのにデプロイするとき、私は、このエラーメッセージが出ます:Herokuへの起動で `Rails.application.database_configuration`:(NoMethodError)を読み込めません

Cannot load `Rails.application.database_configuration`: (NoMethodError) 
undefined method `[]' for nil:NilClass 

を私はRailsは環境変数を見ることができないためであると仮定していますが、私はハードのテストのためのデータベースのユーザー名とパスワードをコード化された場合でも、同じエラーが発生します。

はここにここに私のdatabase.ymlの

default: &default 
    adapter: mysql2 
    encoding: utf8 
    pool: 5 


socket: /tmp/mysql.sock 
    reconnect: true 

development: 
    <<: *default 
    database: hittrax_tournaments_development 
    username: root 
    password: <%= ENV['DB_PASSWORD'] %> 

    <<: *default 
    database: hittrax_tournaments_test 
    username: root 
    password: <%= Rails.application.secrets[:database][:password] %> 

production: 
    adapter: mysql2 
    database: <%= ENV['DATABASE'] %> 
    username: <%= ENV['USERNAME'] %> 
    password: <%= ENV['PASSWORD'] %> 
    host: <%= ENV['HOST'] %> 
    port: 3306 

のスタックトレース

/app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.0.1/lib/active_support/xml_mini.rb:51: warning: constant ::Fixnum is deprecated 
/app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.0.1/lib/active_support/xml_mini.rb:52: warning: constant ::Bignum is deprecated 
/app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.0.1/lib/active_support/core_ext/numeric/conversions.rb:138: warning: constant ::Fixnum is deprecated 
(erb):12:in `<main>': Cannot load `Rails.application.database_configuration`: (NoMethodError) 
undefined method `[]' for nil:NilClass 
    from /app/vendor/ruby-2.4.0/lib/ruby/2.4.0/erb.rb:896:in `eval' 
    from /app/vendor/ruby-2.4.0/lib/ruby/2.4.0/erb.rb:896:in `result' 
    from /app/vendor/bundle/ruby/2.4.0/gems/railties-5.0.1/lib/rails/application/configuration.rb:137:in `database_configuration' 
    from /app/vendor/bundle/ruby/2.4.0/gems/activerecord-5.0.1/lib/active_record/railtie.rb:122:in `block (2 levels) in <class:Railtie>' 
    from /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.0.1/lib/active_support/lazy_load_hooks.rb:43:in `instance_eval' 
    from /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.0.1/lib/active_support/lazy_load_hooks.rb:43:in `execute_hook' 
    from /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.0.1/lib/active_support/lazy_load_hooks.rb:50:in `block in run_load_hooks' 
    from /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.0.1/lib/active_support/lazy_load_hooks.rb:49:in `each' 
    from /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.0.1/lib/active_support/lazy_load_hooks.rb:49:in `run_load_hooks' 
    from /app/vendor/bundle/ruby/2.4.0/gems/activerecord-5.0.1/lib/active_record/base.rb:324:in `<module:ActiveRecord>' 
    from /app/vendor/bundle/ruby/2.4.0/gems/activerecord-5.0.1/lib/active_record/base.rb:24:in `<top (required)>' 
    from /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:293:in `require' 
    from /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:293:in `block in require' 
    from /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:259:in `load_dependency' 
    from /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:293:in `require' 
    from /app/app/models/application_record.rb:1:in `<top (required)>' 
    from /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:293:in `require' 
    from /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:293:in `block in require' 
    from /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:259:in `load_dependency' 
    from /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:293:in `require' 
    from /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:380:in `block in require_or_load' 
    from /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:37:in `block in load_interlock' 
    from /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.0.1/lib/active_support/dependencies/interlock.rb:12:in `block in loading' 
    from /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.0.1/lib/active_support/concurrency/share_lock.rb:150:in `exclusive' 
    from /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.0.1/lib/active_support/dependencies/interlock.rb:11:in `loading' 
    from /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:37:in `load_interlock' 
    from /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:358:in `require_or_load' 
    from /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:336:in `depend_on' 
    from /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:252:in `require_dependency' 
    from /app/vendor/bundle/ruby/2.4.0/gems/railties-5.0.1/lib/rails/engine.rb:476:in `block (2 levels) in eager_load!' 
    from /app/vendor/bundle/ruby/2.4.0/gems/railties-5.0.1/lib/rails/engine.rb:475:in `each' 
    from /app/vendor/bundle/ruby/2.4.0/gems/railties-5.0.1/lib/rails/engine.rb:475:in `block in eager_load!' 
    from /app/vendor/bundle/ruby/2.4.0/gems/railties-5.0.1/lib/rails/engine.rb:473:in `each' 
    from /app/vendor/bundle/ruby/2.4.0/gems/railties-5.0.1/lib/rails/engine.rb:473:in `eager_load!' 
    from /app/vendor/bundle/ruby/2.4.0/gems/railties-5.0.1/lib/rails/engine.rb:354:in `eager_load!' 
    from /app/vendor/bundle/ruby/2.4.0/gems/railties-5.0.1/lib/rails/application/finisher.rb:59:in `each' 
    from /app/vendor/bundle/ruby/2.4.0/gems/railties-5.0.1/lib/rails/application/finisher.rb:59:in `block in <module:Finisher>' 
    from /app/vendor/bundle/ruby/2.4.0/gems/railties-5.0.1/lib/rails/initializable.rb:30:in `instance_exec' 
    from /app/vendor/bundle/ruby/2.4.0/gems/railties-5.0.1/lib/rails/initializable.rb:30:in `run' 
    from /app/vendor/bundle/ruby/2.4.0/gems/railties-5.0.1/lib/rails/initializable.rb:55:in `block in run_initializers' 
    from /app/vendor/ruby-2.4.0/lib/ruby/2.4.0/tsort.rb:228:in `block in tsort_each' 
    from /app/vendor/ruby-2.4.0/lib/ruby/2.4.0/tsort.rb:350:in `block (2 levels) in each_strongly_connected_component' 
    from /app/vendor/ruby-2.4.0/lib/ruby/2.4.0/tsort.rb:431:in `each_strongly_connected_component_from' 
    from /app/vendor/ruby-2.4.0/lib/ruby/2.4.0/tsort.rb:349:in `block in each_strongly_connected_component' 
    from /app/vendor/ruby-2.4.0/lib/ruby/2.4.0/tsort.rb:347:in `each' 
    from /app/vendor/ruby-2.4.0/lib/ruby/2.4.0/tsort.rb:347:in `call' 
    from /app/vendor/ruby-2.4.0/lib/ruby/2.4.0/tsort.rb:347:in `each_strongly_connected_component' 
    from /app/vendor/ruby-2.4.0/lib/ruby/2.4.0/tsort.rb:226:in `tsort_each' 
    from /app/vendor/ruby-2.4.0/lib/ruby/2.4.0/tsort.rb:205:in `tsort_each' 
    from /app/vendor/bundle/ruby/2.4.0/gems/railties-5.0.1/lib/rails/initializable.rb:54:in `run_initializers' 
    from /app/vendor/bundle/ruby/2.4.0/gems/railties-5.0.1/lib/rails/application.rb:352:in `initialize!' 
    from /app/config/environment.rb:5:in `<top (required)>' 
    from /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:293:in `require' 
    from /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:293:in `block in require' 
    from /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:259:in `load_dependency' 
    from /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:293:in `require' 
    from /app/vendor/bundle/ruby/2.4.0/gems/railties-5.0.1/lib/rails/application.rb:328:in `require_environment!' 
    from /app/vendor/bundle/ruby/2.4.0/gems/railties-5.0.1/lib/rails/commands/commands_tasks.rb:157:in `require_application_and_environment!' 
    from /app/vendor/bundle/ruby/2.4.0/gems/railties-5.0.1/lib/rails/commands/commands_tasks.rb:77:in `console' 
    from /app/vendor/bundle/ruby/2.4.0/gems/railties-5.0.1/lib/rails/commands/commands_tasks.rb:49:in `run_command!' 
    from /app/vendor/bundle/ruby/2.4.0/gems/railties-5.0.1/lib/rails/commands.rb:18:in `<top (required)>' 
    from /app/bin/rails:9:in `require' 
    from /app/bin/rails:9:in `<main>' 

感謝です!

答えて

1

YAMLファイル形式を扱う場合、インデントは重要です。あなたはいくつかのインデントレベルを続けています。

また、「テスト」環境のキーが不足しているようです。 rails new hittrax -d mysqlを実行するときに

default: &default 
    adapter: mysql2 
    encoding: utf8 
    pool: 5 
    socket: /tmp/mysql.sock 
    reconnect: true 

development: 
    <<: *default 
    database: hittrax_tournaments_development 
    username: root 
    password: <%= ENV['DB_PASSWORD'] %> 

test: 
    <<: *default 
    database: hittrax_tournaments_test 
    username: root 
    password: <%= Rails.application.secrets[:database][:password] %> 

production: 
    database: <%= ENV['DATABASE'] %> 
    username: <%= ENV['USERNAME'] %> 
    password: <%= ENV['PASSWORD'] %> 
    host: <%= ENV['HOST'] %> 
    port: 3306 

また、参考のために、ここで私が得るものです:アップ

<%= Rails.application.secrets[:database][:password] %> 

Railsのブーツ:問題は、あなたのtest環境のセクションでは、このラインから来

default: &default 
    adapter: mysql2 
    encoding: utf8 
    pool: 5 
    username: root 
    password: 
    socket: /tmp/mysql.sock 

development: 
    <<: *default 
    database: hittrax_development 

test: 
    <<: *default 
    database: hittrax_test 

production: 
    <<: *default 
    database: hittrax_production 
    username: hittrax 
    password: <%= ENV['HITTRAX_DATABASE_PASSWORD'] %> 
+0

こんにちはリチャード、あなたの解決策と一致するように私のdatabase.ymlファイルを変更しましたが、私はまだ同じエラーが発生します。エラーチェックのために私から追加情報が必要ですか? –

+0

完全なスタックトレースで元のポストを更新できたら、それは役に立ちます。 – Richard

+0

スタックトレースを持つようにOPを更新しました。ありがとう! –

0

config/database.ymlをロードし、YAML.loadの前にファイル全体をERB gemで解析します。どのerbコードが実行されているかに関係なく、すべてのerbコードが実行されます。 ERBパーサーが上記の行に来ると、:passwordの値を Rails.application.secrets[:database]から読み込もうとします。対応する環境キーの下には:databaseセクションがない場合には、Rails.application.secrets[:database]nilになり、その上に[:password]を呼び出すと、あなたがこの問題を解決するためにconfig/secrets.ymlで各環境キーの下database:を追加することができ、エラー

undefined method `[]' for nil:NilClass 

を与えます。または、入れ子になったsecrets[:database][:password]構造体をフラット構造体secrets[:database_password]に置き換えます。または、問題の原因となっている行を削除します。

database_configurationの方法は/railties-5.1.4/lib/rails/application/configuration.rbで確認できます。

関連する問題