gpt4 book ai didi

ruby-on-rails - 在 Heroku 上为 Rails 4.2 应用程序正确配置 Postgres 数据库

转载 作者:行者123 更新时间:2023-11-29 11:27:19 25 4
gpt4 key购买 nike

我对如何在使用 Postgres 和 Heroku 的 Rails 4.2 应用程序中配置数据库感到困惑。

遵循建议in this Heroku guide ,你会得到一个 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 connecting to the DB in Ruby提到任何 Rails 应用 4.2 之前 都会有自己的 database.yml文件被 Heroku 覆盖。 Heroku 将解析 DATABASE_URL环境变量并创建一个新的 database.yml文件。

所以我想可以省略 database.yml 中的配置适用于您在 Heroku 上的任何环境,例如暂存和生产环境。你的 database.yml file could essentially look like Hound's (注意缺少生产配置)。

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 上的暂存数据库而不是本地数据库的环境。

This Heroku guide说要导出 DATABASE_URL您的应用程序连接的环境变量(安装 Postgres 后您可以连接到它)。

假设您导出 DATABASE_URL文章中指定的环境变量,您的开发和测试配置必须是什么样的?我们是否按照第一个指南中所示的配置进行配置,例如

default: &default
adapter: postgresql
encoding: unicode
pool: 5
timeout: 5000

development:
<<: *default
database: app_name_development

test:
<<: *default
database: app_name_test

还是我们使用 this Heroku guide 中所示的配置? (使用 hostusername )

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

最佳答案

您的大部分假设都是正确的。下面是一个合理的database.yml配置文件。

default: &default
adapter: postgresql
encoding: unicode
pool: 5
timeout: 5000

development:
<<: *default
database: app_name_development

test:
<<: *default
database: app_name_test

staging:
url: <%= ENV['DATABASE_URL'] %>

production:
url: <%= ENV['DATABASE_URL'] %>

确保 RAILS_ENV 在 Heroku 上正确设置(stagingproduction),否则 Rails 将默认为 development

在本地,测试将选择 test 环境。默认情况下,应用程序将以开发模式启动,使用 development 环境。

关于ruby-on-rails - 在 Heroku 上为 Rails 4.2 应用程序正确配置 Postgres 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28507881/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com