在部署到Heroku时,我需要在database.yml的生产条目中添加/更改某些内容吗?

时间:2016-12-29 13:07:24

标签: ruby-on-rails postgresql heroku

我在我的开发环境中使用postgresql作为数据库,这意味着我设置了我的database.yml,就像下面的代码usernamepassword是我的postgresql的用户名和密码(显然,我使用环境变量来避免硬编码)并将由developmenttest环境继承:

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用户名和密码的developmenttest环境不同,production环境对username和{{1}的值不同}}

我的问题是,我是否需要更改password环境中的usernamepassword?或者我应该保持原样?

1 个答案:

答案 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所做的)在开发环境和生产环境之间无缝切换。