下午好,
我浏览了有关此主题的其他问题,似乎没有人问过这个问题。我原以为没法!
无论如何 - 我的本地机器上运行的PostgreSQL数据库服务器带有MYAPP_DEVELOPMENT数据库。我试过做了
heroku db:push
但是不断收到以下错误:
Failed to connect to database:
Sequel::DatabaseConnectionError -> PGError: FATAL: role "brandon" does not exist
这显然与权限和权限有关。本地/ heroku共享数据库上的用户,但老实说,这种东西并不是那么好。任何帮助,将不胜感激。我目前在我的slug中包含了“database.yml”文件到Heroku,它包含我本地数据库的所有登录/密码信息......因此我没想到会出现这种错误。
谢谢!
**编辑** 这是我的database.yml文件的内容(为清晰起见编辑):
common: &common
adapter: postgresql
encoding: unicode
username: user
password: secret
test:
<<: *common
database: myapp_test
development:
<<: *common
database: myapp_development
production:
<<: *common
database: myapp_production
我认为它必须是Heroku设置方面的东西。请注意,我的database.yaml文件中没有任何地方显示“brandon”。我不太确定从哪里拉出来。我的数据库用户名不是那个(虽然这是我的名字哈哈)
答案 0 :(得分:1)
此错误通常表示在username
文件中的相应环境下尚未指定database.yml
。
您的database.yml
文件应该类似于以下内容(我在本地使用MySQL,因此adapter
和socket
参数):
common: &common
adapter: mysql2
encoding: utf8
reconnect: false
pool: 5
username: <your_username>
password: <your_password>
socket: /tmp/mysql.sock
development:
<<: *common
database: appname_dev
test:
...
staging:
...
production:
<<: *common
database: appname_prod
如果这不能解决您的问题,请检查以确保Heroku在正确的环境中运行:
heroku config --app <appname>
RACK_ENV
设置为production
heroku config:add RACK_ENV=production --app <appname>
(如果您粘贴了database.yml
文件的内容会很有帮助。)
答案 1 :(得分:0)
您必须使用Heroku特定的ENV var来使用通常为ENV['DATABASE_URL']
的数据库
编辑:如果您有像数据映射器这样的数据库映射器,您可以这样写:
DataMapper.setup(:default, ENV['DATABASE_URL'] || LOCAL_DB_URL)
然后使用Heroku DB(如果存在)或默认使用存储在LOCAL_DB_URL var中的本地数据库。
答案 2 :(得分:-1)
感谢大家对此的投入。我最终通过在db:push ...例如:
期间向Heroku明确提供我的登录详细信息来修复我的问题heroku db:push postgres://postgres:PASSWORD@127.0.0.1:5432/DATABASE
不确定为什么它没有在我的database.yml文件中使用(相同)信息,但是哦。哦。