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 文件中。
如果我从我在这里和那里阅读的内容中理解正确,这是一个双重错误的做法,我应该改为:
定义自定义用户名和密码
使用环境变量
这是否正确,正确的做法是什么?
使用您的 Mac OS X 用户名和无密码进行开发和测试就可以了。这是 Homebrew 默认设置 PostgreSQL 的方式,这是 Mac Rails 开发人员的常见配置。
如果您部署到 Heroku,那么 Heroku 已经为您指定了一个 DATABASE_URL
环境变量;您无需做任何事情。
我建议对您的设置进行的更改是:
- 您可能不需要指定用户名。如果你用自制软件安装了 PostgreSQL,那么你的用户名无论如何都是默认的 pg 用户,所以它是多余的。
- 指定不同的测试数据库。为开发和测试使用相同的数据库名称会导致问题。
- 彻底删除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
在我的 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 文件中。
如果我从我在这里和那里阅读的内容中理解正确,这是一个双重错误的做法,我应该改为:
定义自定义用户名和密码
使用环境变量
这是否正确,正确的做法是什么?
使用您的 Mac OS X 用户名和无密码进行开发和测试就可以了。这是 Homebrew 默认设置 PostgreSQL 的方式,这是 Mac Rails 开发人员的常见配置。
如果您部署到 Heroku,那么 Heroku 已经为您指定了一个 DATABASE_URL
环境变量;您无需做任何事情。
我建议对您的设置进行的更改是:
- 您可能不需要指定用户名。如果你用自制软件安装了 PostgreSQL,那么你的用户名无论如何都是默认的 pg 用户,所以它是多余的。
- 指定不同的测试数据库。为开发和测试使用相同的数据库名称会导致问题。
- 彻底删除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