【问题标题】:Heroku: Rails couldn't infer from your database.ymlHeroku:Rails 无法从您的 database.yml 中推断出
【发布时间】:2021-02-08 05:49:08
【问题描述】:

这是一个普通的 JavaScript 前端 Rails 后端网站。它在本地工作,然后我把它放在heroku上,现在我得到了错误: “Rails 无法从 database.yml 中推断您是否使用了多个数据库,也无法为非主数据库生成任务。如果您想使用此功能,请简化您的 ERB。” 这是我尝试 rake db:create、rake db:migrate 等的时候。我找不到任何关于如何解决这个问题的好资源。我读到了在 puma 文件中放入一行以便它可以翻译 erb。我读到我需要在我的 database.yml 文件中放入“LESS”。没有任何效果,甚至这里关于堆栈溢出的类似帖子也没有太大帮助。
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'] %>
 

终端错误

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) 

【问题讨论】:

  • 看起来像两个不同的问题:一个本地问题和一个 Heroku 问题。在本地,您的 database.yml 在语法上无效。要解决此问题,请按照错误消息和learn about YAML syntax 中的说明进行操作。回复:heroku 问题,请参阅下面关于 url: 键的 Etienne 的回答。
  • 我尊重您的帮助,并且一定会查看 YAML 教程。然而,这在尝试连接 heroku 端点之前实际上是有效的。我的本地端点工作得很好。一旦我在生产中添加了这一行:数据库: 它就坏了。

标签: ruby-on-rails ruby postgresql heroku


【解决方案1】:

我注意到的第一件事是database.yml 内的production 键之前的空格。这可以匹配堆栈跟踪中的错误消息:

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

其次,如果你使用 Heroku 管理的 postgresql 数据库,你应该只使用url 键。它在您的生产配置文件上方的 cmets 进行了解释。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-09
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多