Heroku 上的数据库连接

15

哇,我被这个问题困扰了好几天。我在Heroku上连接database.yml时遇到了麻烦。我正在使用Cedar和ruby 1.9.2。我的开发和测试数据库是sqlite3,而生产数据库是postgreSQL以适应Cedar规则。 以下是我的Ruby脚本中的代码:

Rails.env.production? ? (env = "production") : (env = "development")
dbconfig = YAML::load(File.open('config/database.yml'))[env]
ActiveRecord::Base.establish_connection(dbconfig)

在本地一切都正常,但是当我将代码推送到 Heroku 时,出现了以下错误:

ArgumentError: syntax error on line 17, col 0: `adapter = uri.scheme'
from /usr/local/lib/ruby/1.9.1/syck.rb:135:in `load'

看起来Heroku不喜欢我的database.yml文件。以下是概览:

development:
  adapter: sqlite3
  database: db/development.sqlite3
  pool: 5
  timeout: 5000

test:
  adapter: sqlite3
  database: db/test.sqlite3
  pool: 5
  timeout: 5000

production:
  adapter: postgresql
  encoding: unicode
  database: foo
  port: 5432
  host: foobar.amazonaws.com
  username: foo
  password: bar

你是否曾经成功连接到数据库?答案似乎并没有完整解决连接问题。 - baash05
1个回答

27

首先,Heroku会覆盖您的config/database.yml文件,并用其自己的针对Heroku的版本替换它。这是Heroku自动将您的应用程序连接到其自己的PostgreSQL数据库的方式。如果要告诉Heroku有关您自己的PosgreSQL数据库的信息,您应该设置正确的配置变量,并且最好省略您存储库中config/database.yml中的生产数据库,因为Heroku无论如何都会忽略它。

其次,config/database.yml文件是YAML文件的ERB模板。在运行输出结果之前,您必须先将文件内容通过评估Ruby(ERB)运行。


好的,如果我想在生产环境中保留Heroku共享数据库,我只需删除上面的三行代码,让Heroku自己管理数据库。谢谢! - PEF
如果您想使用Heroku postgres addon(通过Heroku共享和专用数据库),则无需进行任何操作。如果您想使用Amazon RDS addon,则也无需进行任何操作。这两个插件都会设置应用程序的“DATABASE_URL”配置变量,而Heroku的“config/database.yml”会解析它。如果您想使用自己的数据库服务器,则应将应用程序的“DATABASE_URL”配置变量设置为指向您自己的数据库服务器,并且不应触摸您的“config/database.yml”。 - yfeldblum
8
如果你想查看Heroku放在你的config/database.yml文件中的内容,只需执行"heroku run bash"和"cat config/database.yml"命令即可 ;) - Christopher Lindblom
我现在也遇到了这个问题。config/database.yml 文件的第17行是 adapter = uri.scheme。我认为 Heroku 写入的 database.yml 文件有问题。 - Dave Sag
请参考这篇其他的SO帖子:https://dev59.com/I2jWa4cB1Zd3GeqPpldx - Philippe Monnet
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接