我在我的开发环境中使用postgresql
作为数据库,这意味着我设置了我的database.yml
,就像下面的代码username
和password
是我的postgresql的用户名和密码(显然,我使用环境变量来避免硬编码)并将由development
和test
环境继承:
default: &default
adapter: postgresql
encoding: unicode
# For details on connection pooling, see rails configuration guide
# http://guides.rubyonrails.org/configuring.html#database-pooling
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
host: localhost
username: <%= ENV['FOO_DATABASE_USERNAME'] %>
password: <%= ENV['FOO_DATABASE_PASSWORD'] %>
我只是对生产环境感到好奇,它的代码如下:
production:
<<: *default
database: foo_production
username: foo
password: <%= ENV['FOO_DATABASE_PASSWORD'] %>
与使用我的postgresql用户名和密码的development
和test
环境不同,production
环境对username
和{{1}的值不同}}
我的问题是,我是否需要更改password
环境中的username
和password
?或者我应该保持原样?
答案 0 :(得分:0)
您在这里谈论的内容实质上是如何使用多种不同的数据库凭据使您的代码在多个环境(开发和生产)中工作。
通常通过环境变量处理这种方式。
在上面的示例中,您似乎已为本地数据库创建了两个环境变量:
PINTERESTING_APP_DATABASE_USERNAME
PINTERESTING_APP_DATABASE_PASSWORD
在制作中,我假设您设置了一些不同的环境变量,其中包含您的生产Postgres凭证。
您需要在代码中执行的操作是从这两个选项中选择一个,并在任何地方使用它们。
这是我在我的应用程序中用来实现此目的的一些伪代码:
DATABASE_HOST = ENV['LOCAL_DB_HOST'] || ENV['PRODUCTION_DB_HOST']
DATABASE_PORT = ENV['LOCAL_DB_PORT'] || ENV['PRODUCTION_DB_PORT']
DATABASE_USERNAME = ENV['LOCAL_DB_USERNAME'] || ENV['PRODUCTION_DB_USERNAME']
DATABASE_PASSWORD = ENV['LOCAL_DB_PASSWORD'] || ENV['PRODUCTION_DB_PASSWORD']
正如您在上面所看到的,我所做的就是使用我的开发凭据或我的生产凭据,具体取决于可用的环境变量。
这使我可以通过修改环境变量(这就是Heroku所做的)在开发环境和生产环境之间无缝切换。