我对如何在使用 Postgres 和 Heroku 的 Rails 4.2 应用程序中配置数据库感到困惑。
按照这个 Heroku 指南中的建议,你会得到config/database.yml
这样的:
default: &default
adapter: postgresql
encoding: unicode
pool: 5
timeout: 5000
development:
<<: *default
database: app_name_development
test:
<<: *default
database: app_name_test
production:
<<: *default
database: app_name_production
但是当我尝试这个时,我的开发和测试环境使用与登台环境相同的数据库(注意该文件没有登台配置)。那不好。
这个Heroku guide for connection to the DB in Ruby提到任何4.2 之前database.yml
的 Rails 应用程序都会被 Heroku 覆盖它们的文件。Heroku 将解析DATABASE_URL
环境变量并创建一个新database.yml
文件。
因此,我想database.yml
对于 Heroku 上的任何环境(例如登台和生产),都可以省略配置。您的database.yml
文件本质上可能看起来像 Hound 的(注意缺少生产配置)。
development: &default
adapter: postgresql
encoding: unicode
database: app_development
pool: 5
test:
<<: *default
database: app_test
但由于我们使用的是 Rails 4.2,我认为 Heroku 不会覆盖该database.yml
文件。在这种情况下,您是否必须database.yml
在 Heroku 上为我们的环境指定数据库配置?或者将它们排除在外仍然安全吗?如果我们确实需要为 Heroku 环境指定配置,那么以下内容就足够了吗?
staging:
url: <%= ENV['DATABASE_URL'] %>
production:
url: <%= ENV['DATABASE_URL'] %>
我也对开发和测试环境的正确配置感到困惑。正如我上面提到的,显示的第一个配置具有使用 Heroku 上的暂存数据库而不是本地数据库的环境。
这个 Heroku 指南说要为您的应用程序导出DATABASE_URL
环境变量以进行连接(一旦安装了 Postgres 并且您可以连接到它)。
假设您DATABASE_URL
按照文章中的说明导出 env var,那么您的开发和测试配置必须是什么样的?我们是否使用第一个指南中所示的配置,例如
default: &default
adapter: postgresql
encoding: unicode
pool: 5
timeout: 5000
development:
<<: *default
database: app_name_development
test:
<<: *default
database: app_name_test
或者我们是否使用本 Heroku 指南中所示的配置(使用host
and username
)
development:
adapter: postgresql
host: localhost
username: user
database: app-dev
更新1:这就是我现在所知道的。config/database.yml
如果您部署到 Heroku,无论您的 Rails 版本如何,都不需要登台和生产配置。在 4.2 之前,Heroku 会database.yml
根据DATABASE_URL
环境变量的值生成它自己的文件,覆盖你的配置文件(如果它存在的话)。从 Rails 4.2 开始,您的应用程序将DATABASE_URL
直接使用环境变量(绕过database.yml
文件),因此 Heroku 不需要(也不会)生成配置文件。
我还弄清楚了为什么我的开发和测试环境使用 Heroku 应用程序中的远程暂存数据库,而不是在其database.yml
配置中指定的本地数据库。这是因为我的本地.env
开发文件基于我的暂存.env
文件,其中包含用于连接到数据库的环境变量,例如DATABASE_URL
. 因为DATABASE_URL
存在于我的开发.env
文件中,所以我的 Rails 4.2 应用程序正在使用它并因此连接到暂存数据库。为了修复它,我从开发.env
文件中删除了这些环境变量,并使用bundle exec rake db:setup
.
更新 2: Rails 指南的这一部分更详细地介绍了如何配置数据库,值得一读: http: //guides.rubyonrails.org/configuring.html#configuring-a-database