【问题标题】:YAML syntax error when running "heroku run rake db:migrate" on my Rails app在我的 Rails 应用程序上运行“heroku run rake db:migrate”时出现 YAML 语法错误
【发布时间】:2019-02-22 22:53:10
【问题描述】:

我已经为这个问题搜索了几个小时的所有解决方案,但我无法让它工作。

我有一个 Rails 应用程序,我正在尝试将其部署到 heroku,但是当我运行 heroku run rake db:migrate 时,我收到此错误:

rake aborted!
YAML syntax error occurred while parsing /app/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 7 column 3

我已经使用YAML validator 来验证我的database.yml,但它仍然不起作用。这是它的样子:

# database.yml
--- 
default: 
  adapter: postgresql
  encoding: unicode
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
development: 
  adapter: postgresql
  database: chamada_development
  encoding: unicode
  password: "<%= ENV['CHAMADA_DATABASE_PASSWORD'] %>"
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: chamada
production: 
  adapter: postgresql
  database: chamada_production
  encoding: unicode
  password: "<%= ENV['CHAMADA_DATABASE_PASSWORD'] %>"
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: chamada
test: 
  adapter: postgresql
  database: chamada_test
  encoding: unicode
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

我该如何解决这个问题?我不知道。

【问题讨论】:

  • 第七行是开发部分的`adapter: postgresql`,对吧?你确定这是adapter 之前的两个空格(没有别的)吗? cat -vet database.yml 说什么?
  • 原因可能在编码上。例如,可能有 BOM。如果是 Windows,您将看不到它。创建一个 UTF-8 格式的新文档并重复。
  • 您是否能够将您的应用程序部署到heroku?你有数据库配置吗?如果您运行heroku config --app &lt;yourappname&gt;,您会看到DATABASE_URL 吗?
  • 是的,我的意思是替换为新的database.yml。要指定编码,您可以选择使用 UTF-8 保存。例如,您可以在 Sublime 或其他文本编辑器中执行此操作
  • 没有 BOM、不间断空格或其他符号?我建议使用手动输入制作新文件。

标签: ruby heroku syntax-error yaml ruby-on-rails-5.2


【解决方案1】:

在一行中使用单引号

  password: <%= ENV['CHAMADA_DATABASE_PASSWORD'] %>

你使用了双引号,所以就像:

"&lt;%= ENV["CHAMADA_DATABASE_PASSWORD"] %&gt;"

这就是错误的原因。

【讨论】:

  • 尝试删除密码中的双引号。您在所有行的末尾也有空格,请删除它们。并检查所有行开头的空格。
【解决方案2】:

更新:我已经有一段时间没有在 Heroku 上工作了,但是我在我的 database.yml 文件中找到了一个带有这些注释的旧项目:

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

您可能需要确保正确设置了环境变量。运行heroku config --app &lt;your-app-name&gt;检查

你不应该需要----

如果您要设置默认值,您不妨使用它来避免重复自己。并且还使用单引号并删除字符串插值。您可以在每个组之间添加空行。

default: &default 
  adapter: postgresql
  encoding: unicode
  pool: <%= ENV.fetch('RAILS_MAX_THREADS') { 5 } %>

development:
  <<: *default 
  database: chamada_development
  password: <%= ENV['CHAMADA_DATABASE_PASSWORD'] %>
  username: chamada

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

test:
  <<: *default
  adapter: postgresql
  database: chamada_test

【讨论】:

  • 3 个破折号,组之间的空白行和 DRY 不应影响错误
  • @mechnicov 确实没有。抱歉,但我已经尝试过(可能)所有可能的布局更改双引号和单引号,删除并放回默认值和所有内容......它只是不起作用,我不知道为什么......我刚刚尝试了 lacostenycoder ' s 解决方案,但它仍然不起作用。
【解决方案3】:

我只是从头开始逐步解决它,在 Heroku 中部署应用程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-18
    • 2014-03-21
    • 1970-01-01
    • 1970-01-01
    • 2017-10-04
    相关资源
    最近更新 更多