我使用RoR + Postgresql开发了一个网站,使用Git将其迁移到Heroku。一切顺利。
然后我将网站和数据库从Heroku导回到本地(在另一台计算机上)。一切顺利。
但是,我现在在本地有4个数据库:
myapp
myapp_test
myapp_development
myapp_production
在本地测试我的应用时,事实证明它正在与myapp_development进行通信。
但我的所有数据都在数据库myapp
中。
如何指示RoR使用数据库myapp
?
答案 0 :(得分:0)
如果我理解你是对的 - 我可以提供下一个解决方案。 以下是 config / database.yml
的示例login: &login
adapter: postgresql
encoding: utf8
host: localhost
username: user_name
password: password
development:
<<: *login
database: db_name_development
test:
<<: *login
database: db_name_test
production:
<<: *login
database: db_name_production
尝试替换:
development:
<<: *login
database: db_name_development
使用:
development:
<<: *login
database: myapp_development
我希望它会对你有所帮助。
答案 1 :(得分:0)
Rails使用来自两个来源的数据库配置 - ENV['DATABASE_URL']
和config/database.yml
。
ENV['DATABASE_URL']
是一个env var,它在shell,操作系统中设置,或者在使用该进程时设置。
有关将ENV['DATABASE_URL']
设置为:
postgresql://localhost/myapp
将通过postgres连接到正确的数据库。这就是Heroku设置生产应用程序连接到哪个数据库的方式。
config/database.yml
只是一个YAML文件,在设置数据库时由ActiveRecord读取。它包含哈希散列 - 使用的密钥由Rails.env
确定(通过ENV['RAILS_ENV']
设置)。
common: &common
adapter: postgresql
encoding: utf8
host: localhost
development:
<<: *common # this is YAML syntax to merge this hash with &common
database: myapp
ENV['DATABASE_URL']
中的值与来自config/database.yml
的值合并,但ENV['DATABASE_URL']
具有优先权。
config/database.yml
中设置最低限度 - 出于安全原因,应该通过ENV['DATABASE_URL']
设置所有内容,例如用户名,密码等,以避免开发者大战。