2

我正在向 Heroku 部署一个应用程序,它大部分都很好,但是对于这个错误

mapping values are not allowed in this context at line 22 column 13 (Psych::SyntaxError)

他们所指的行是 database.yml 文件的第 22 行,根据标准做法,Heroku 本身正在写入我自己的文件。

进入heroku run bash并查看相关文件:

<%

require 'cgi'
require 'uri'

begin
  uri = URI.parse(ENV["DATABASE_URL"])
rescue URI::InvalidURIError
  raise "Invalid DATABASE_URL"
end

raise "No RACK_ENV or RAILS_ENV found" unless ENV["RAILS_ENV"] || ENV["RACK_ENV"]

def attribute(name, value, force_string = false)
  if value
    value_string =
      if force_string
        '"' + value + '"'
      else
        value
      end
    "#{name}: #{value_string}"
  else
    ""
  end
end

adapter = uri.scheme
adapter = "postgresql" if adapter == "postgres"

database = (uri.path || "").split("/")[1]

username = uri.user
password = uri.password

host = uri.host
port = uri.port

params = CGI.parse(uri.query || "")

%>

<%= ENV["RAILS_ENV"] || ENV["RACK_ENV"] %>:
  <%= attribute "adapter",  adapter %>
  <%= attribute "database", database %>
  <%= attribute "username", username %>
  <%= attribute "password", password, true %>
  <%= attribute "host",     host %>
  <%= attribute "port",     port %>

<% params.each do |key, value| %>
  <%= key %>: <%= value.first %>
<% end %>

第 22 行是

    "#{name}: #{value_string}"

有关如何解决此问题的任何建议?

4

1 回答 1

12

好的,经过更多研究,我已经解决了这个问题。叹。

在我的本地机器上,我正在加载我的数据库配置,如下所示:

dbconfig = YAML::load(File.open(File.join("config","database.yml")))

但是因为ymlHeroku生成的文件实际上是ERB变相的文件,所以需要先解析一下。

将上面的行更改为:

dbconfig = YAML.load(ERB.new(File.read(File.join("config","database.yml"))).result)

工作一种享受。

于 2013-08-09T02:45:40.223 回答