【问题标题】:When deploying to Heroku, is there something I need to add/change in the production entry in the database.yml?部署到 Heroku 时,我需要在 database.yml 的生产条目中添加/更改什么吗?
【发布时间】:2016-12-29 13:07:23
【问题描述】:

我在我的开发环境中使用postgresql 作为数据库,这意味着我设置了我的database.yml,如下面的代码,其中usernamepassword 是我的postgresql 的用户名和密码(显然,我'm 使用环境变量来避免硬编码)并将被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 环境具有不同的 usernamepassword 值。

我的问题是,我需要在production 环境中更改usernamepassword 吗?还是我应该保持原样?

【问题讨论】:

标签: ruby-on-rails postgresql heroku


【解决方案1】:

您在这里谈论的本质上是如何使您的代码在具有多个不同数据库凭据的多个环境(开发和生产)中工作。

通常的处理方式是通过环境变量。

在上面的示例中,您似乎为本地数据库创建了两个环境变量:

  • 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 所做的),就可以在开发和生产环境之间无缝切换。

【讨论】:

    猜你喜欢
    • 2013-11-19
    • 2019-02-10
    • 2020-11-26
    • 2018-11-03
    • 1970-01-01
    • 2015-10-08
    • 2015-03-08
    • 1970-01-01
    • 2020-07-15
    相关资源
    最近更新 更多