Joh*_*len 3 ruby ruby-on-rails heroku
I'm an intermediate Rails developer and I am using a remote database as my sole connection in a production environment. My stack is Rails 5 and Ruby 2.4.0. I have already set the environment variables up for the database such as USERNAME and PASSWORD. When I deploy to Heroku I get this error message:
Cannot load `Rails.application.database_configuration`: (NoMethodError)
undefined method `[]' for nil:NilClass
Run Code Online (Sandbox Code Playgroud)
I'm assuming this is because that Rails can't see the environment variables, but even when I hard coded the username and password for the database for testing the same error occurs.
Here's my 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'] %>
test:
<<: *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
Run Code Online (Sandbox Code Playgroud)
Here's the stack trace
/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>'
Run Code Online (Sandbox Code Playgroud)
Thanks!
问题来自您的test环境部分中的此行:
<%= Rails.application.secrets[:database][:password] %>
Run Code Online (Sandbox Code Playgroud)
Rails启动时,它将加载config/database.yml并使用ERB之前的gem 解析整个文件YAML.load。因此,无论您在哪个环境下运行,每个erb代码都将执行。当ERB解析器到达上一行时,它尝试读取:passwordfrom
的值Rails.application.secrets[:database]。当:database相应的环境键下没有任何节时,Rails.application.secrets[:database]变为nil并调用[:password]它会给您错误
undefined method `[]' for nil:NilClass
Run Code Online (Sandbox Code Playgroud)
您可以database:在每个环境密钥下添加config/secrets.yml以解决此问题。或者用secrets[:database][:password]平面结构代替嵌套结构secrets[:database_password]。或删除引起问题的线。
您可以在中检查该database_configuration方法以/railties-5.1.4/lib/rails/application/configuration.rb获取更多详细信息。
| 归档时间: |
|
| 查看次数: |
6135 次 |
| 最近记录: |