0
votes

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) 
1
Looks like two different problems: a local problem and a heroku problem. Locally, your database.yml is syntactically invalid. To fix that, follow the instructions in the error message, and learn about YAML syntax. Re: the heroku problem, see Etienne's answer below about the url: key.Jared Beck
I respect your help and will definitely look at the YAML tutorial. However this actually worked prior to attempting to hook up the heroku endpoints. My local endpoints worked just fine. As soon as I added the line under production: database: <%= ENV['DATABASE_URL'] %> it broke.swordfish

1 Answers

1
votes

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'] %>