Rails 4:从 sqlite3 迁移后在开发中使用环境变量设置 Postgresql

Rails 4: setup Postgresql with environment variables in development after migration from sqlite3

在我的 Rails 4 应用程序中,我曾经在开发和测试中使用默认的 Sqlite3,而在生产 (Heroku) 中使用 Postgresql。

我刚刚将所有三个环境从 Sqlite3 切换到 Postgresql,一切正常。

我目前的 database.yml 看起来像这样:

default: &default
  adapter: postgresql
  encoding: unicode
  username: XXX
  password: <--- empty --->
  database: name-of-my-app
  pool: 5

development:
  <<: *default
  host: localhost

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  <<: *default
  host: localhost

production:
  <<: *default
  host: localhost

如您所见,我使用的是默认用户名(我的 Mac OSX 用户名)和密码(无密码),它们被硬编码在 database.yml 文件中。

如果我从我在这里和那里阅读的内容中理解正确,这是一个双重错误的做法,我应该改为:

  1. 定义自定义用户名和密码

  2. 使用环境变量

这是否正确,正确的做法是什么?

使用您的 Mac OS X 用户名和无密码进行开发和测试就可以了。这是 Homebrew 默认设置 PostgreSQL 的方式,这是 Mac Rails 开发人员的常见配置。

如果您部署到 Heroku,那么 Heroku 已经为您指定了一个 DATABASE_URL 环境变量;您无需做任何事情。

我建议对您的设置进行的更改是:

  1. 您可能不需要指定用户名。如果你用自制软件安装了 PostgreSQL,那么你的用户名无论如何都是默认的 pg 用户,所以它是多余的。
  2. 指定不同的测试数据库。为开发和测试使用相同的数据库名称会导致问题。
  3. 彻底删除database.yml的制作部分。 Heroku 注入了必要的环境变量,所以你不需要它。

进行这些更改后,您的 database.yml 应该如下所示:

development:
  adapter: postgresql
  encoding: unicode
  database: name_of_my_app_development
  min_messages: WARNING
  pool: 5

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  adapter: postgresql
  encoding: unicode
  database: name_of_my_app_test
  min_messages: WARNING
  pool: 5