swordfish
swordfish

Reputation: 11

Heroku: Rails couldn't infer from your database.yml

This is a vanilla JavaScript Front-End Rails backend website. It was working locally then I put it on heroku and now I am getting the error: "Rails couldn't infer whether you are using multiple databases from your database.yml and can't generate the tasks for the non-primary databases. If you'd like to use this feature, please simplify your ERB." this is when I attempt rake db:create, rake db:migrate, etc etc etc. I cannot find any good resources on how to fix this. I read about putting a line in the puma file such that it could translate erb. I read I need to put "LESS" in my database.yml file. Nothing has worked and even similar posts here on stack overflow do not give much help.
database.yml

# PostgreSQL. Versions 9.3 and up are supported.
#
# Install the pg driver:
#   gem install pg
# On macOS with Homebrew:
#   gem install pg -- --with-pg-config=/usr/local/bin/pg_config
# On macOS with MacPorts:
#   gem install pg -- --with-pg-config=/opt/local/lib/postgresql84/bin/pg_config
# On Windows:
#   gem install pg
#       Choose the win32 build.
#       Install PostgreSQL and put its /bin directory on your path.
#
# Configure Using Gemfile
# gem 'pg'
#
default: &default
 adapter: postgresql
 encoding: unicode
  For details on connection pooling, see Rails configuration guide
  https://guides.rubyonrails.org/configuring.html#database-pooling
 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

development:
  <<: *default
  database: tempGradientRailsJsonAPIJS_development
  username: postgres

  password: *******
  
  host: localhost 
  
  # The specified database role being used to connect to postgres.
  # To create additional roles in postgres see `$ createuser --help`.
  # When left blank, postgres will use the default role. This is
  # the same name as the operating system user that initialized the database.
  #username: tempGradientRailsJsonAPIJS

  # The password associated with the postgres role (username).
  #password:

  # Connect on a TCP socket. Omitted by default since the client uses a
  # domain socket that doesn't need configuration. Windows does not have
  # domain sockets, so uncomment these lines.
  #host: localhost

  # The TCP port the server listens on. Defaults to 5432.
  # If your server runs on a different port number, change accordingly.
  #port: 5432

  # Schema search path. The server defaults to $user,public
  #schema_search_path: myapp,sharedapp,public

  # Minimum log levels, in increasing order:
  #   debug5, debug4, debug3, debug2, debug1,
  #   log, notice, warning, error, fatal, and panic
  # Defaults to warning.
  #min_messages: notice

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  <<: *default
  database: tempGradientRailsJsonAPIJS_test

# As with config/credentials.yml, you never want to store sensitive information,
# like your database password, in your source code. If your source code is
# ever seen by anyone, they now have access to your database.
#
# Instead, provide the password as a unix environment variable when you boot
# the app. Read https://guides.rubyonrails.org/configuring.html#configuring-a-database
# for a full rundown on how to provide these environment variables in a
# production deployment.
#
# On Heroku and other platform providers, you may have a full connection URL
# available as an environment variable. For example:
#
#   DATABASE_URL="postgres://myuser:mypass@localhost/somedatabase"
#
# You can use this database configuration with:
#
  #  production:
  #    url: <%= ENV['DATABASE_URL'] %>

 production:
   <<: *default 
  database: <%= ENV['DATABASE_URL'] %>
  username: tempGradientRailsJsonAPIJS
  password: <%= ENV['TEMPGRADIENTRAILSJSONAPIJS_DATABASE_PASSWORD'] %>
 

error in terminal

Rails couldn't infer whether you are using multiple databases from your database.yml and can't generate the tasks for the non-primary databases. If you'd like to use this feature, please simplify your ERB.
rake aborted!
YAML syntax error occurred while parsing /mnt/c/Users/swordfish/dev/flatiron/Portfolio/frontBack/tempGradientRailsJsonAPIJS/config/database.yml. Please note that YAML must be consistently indented using spaces. Tabs are not allowed. Error: (<unknown>): did not find expected key while parsing a block mapping at line 17 column 1
/home/swordfish/.rvm/gems/ruby-2.6.1/gems/railties-6.0.2.2/lib/rails/application/configuration.rb:246:in `rescue in database_configuration'
/home/swordfish/.rvm/gems/ruby-2.6.1/gems/railties-6.0.2.2/lib/rails/application/configuration.rb:221:in `database_configuration'
/home/swordfish/.rvm/gems/ruby-2.6.1/gems/activerecord-6.0.2.2/lib/active_record/railtie.rb:39:in `block (3 levels) in <class:Railtie>'
/home/swordfish/.rvm/gems/ruby-2.6.1/gems/rake-13.0.1/exe/rake:27:in `<top (required)>'
/home/swordfish/.rvm/gems/ruby-2.6.1/bin/ruby_executable_hooks:24:in `eval'
/home/swordfish/.rvm/gems/ruby-2.6.1/bin/ruby_executable_hooks:24:in `<main>'

Caused by:
Psych::SyntaxError: (<unknown>): did not find expected key while parsing a block mapping at line 17 column 1
/home/swordfish/.rvm/gems/ruby-2.6.1/gems/railties-6.0.2.2/lib/rails/application/configuration.rb:228:in `database_configuration'
/home/swordfish/.rvm/gems/ruby-2.6.1/gems/activerecord-6.0.2.2/lib/active_record/railtie.rb:39:in `block (3 levels) in <class:Railtie>'
/home/swordfish/.rvm/gems/ruby-2.6.1/gems/rake-13.0.1/exe/rake:27:in `<top (required)>'
/home/swordfish/.rvm/gems/ruby-2.6.1/bin/ruby_executable_hooks:24:in `eval'
/home/swordfish/.rvm/gems/ruby-2.6.1/bin/ruby_executable_hooks:24:in `<main>'
Tasks: TOP => db:migrate => db:load_config
(See full trace by running task with --trace) 

Upvotes: 0

Views: 4996

Answers (1)

Etienne Batise
Etienne Batise

Reputation: 71

First thing I notice is the whitespace before the production key inside the database.yml. This could match the error message in the stack trace:

did not find expected key while parsing a block mapping at line 17 column 1

Second, if you are using Heroku-managed postgresql db, you should only use the url key. It is explained it the comments above your production conf.

production:
    url: <%= ENV['DATABASE_URL'] %>

Upvotes: 3

Related Questions