【问题标题】:How to configure database.yml for production如何为生产配置 database.yml
【发布时间】:2017-09-21 06:51:48
【问题描述】:

我想通过Dokku 将我的应用程序部署到 VPS。
dokku-postgresdocumentation 和相关的、稀缺的互联网文档(GitHub 上的one)放在一起,似乎有必要配置database.yml 以使用url 环境变量url: <%= ENV['DATABASE_URL'] %>

由于我找不到任何其他信息来源,我想知道应该如何配置 database.yml,以及 Rails 将如何连接到使用 Dokku 创建的 postgres 服务

例如,理所当然地认为将url 链接到DATABASE_URL 变量是必要的,这是否足以在我的Rails 应用程序和postgres 服务之间建立连接,或者仍然需要使用用户名和密码?在后一种情况下,我应该使用什么用户名和密码?

下面是我的database.yml目前的样子。

default: &default
  adapter: postgresql
  encoding: unicode
  pool: 5
  username: asarluhi

development:
  <<: *default
  database: fireworks_app_development

test:
  <<: *default
  database: fireworks_app_test

production:
  <<: *default
  database: fireworks_app_production
  pool: 25
  username: fireworks_app
  password: <%= ENV['FIREWORKS_APP_DATABASE_PASSWORD'] %>

该文件是在我创建应用程序时按原样创建的(除了用于生产的更高池大小)。您如何建议编辑 production 部分?

dokku-postgres 文档指出,默认情况下将在链接的应用程序上设置以下(仅此而已):

DATABASE_URL=postgres://postgres:SOME_PASSWORD@dokku-postgres-lolipop:5432/lolipop

代替棒棒糖 postgres 服务示例,我将使用 fireworks_app_production 来匹配 database.yml 中的数据库名称
url 指向DATABASE_URL 变量后,是否还需要用户名密码?我是否应该添加或删除其他任何内容?

【问题讨论】:

  • 您在database.yml 中输入的设置与来自 ENV["DATABASE_URL"] 的选项合并。来自 ENV 的设置优先。所以是的,您的pool 选项将被使用。 guides.rubyonrails.org/configuring.html#configuring-a-database
  • 如果我决定在database.yml 中添加url: &lt;%= ENV['DATABASE_URL'] %&gt;,我的pool 选项会被合并吗?正如您链接的文档所述,这将是最佳实践。
  • database.yml 中显式添加url: &lt;%= ENV['DATABASE_URL'] %&gt; 不是必需的,也不是最佳实践,因为数据库连接器默认使用ENV['DATABASE_URL']。它只是一个示例,展示了您应该在生产中使用 ENV var 而不是检查数据库凭据的概念/最佳实践。

标签: ruby-on-rails postgresql vps dokku


【解决方案1】:

你不必担心带有dokku的database.yml,只需将你的应用程序上传到服务器,我们以“fireworks”作为名称为例。

当您第一次上传应用程序时,它会自动创建,因此您无需创建它。

然后你安装 postgres 插件并运行

# that will create the container for the database
$ dokku postgres:create fireworks
# and then you link both, the app with the database
$ dokku postgres:link fireworks fireworks

您不必担心其他任何事情,dokku 将连接此

那么你只需要运行db:migrate,一切都准备就绪了!

【讨论】:

  • 我不确定我是否应该运行db:create,考虑到该应用程序已经与(已经创建的)烟花 postgres 服务链接。文档说我应该只运行db:migrate。例如:donpottinger.net/blog/2014/11/17/…
  • 你说得对,只要运行 db:migrate 就不用担心创建了
  • 你永远不会在生产环境中真正使用db:create,因为生产环境中的数据库用户不应该拥有创建或删除数据库的权限(这限制了服务器被入侵时可能造成的损害)。
猜你喜欢
  • 1970-01-01
  • 2015-03-08
  • 1970-01-01
  • 2020-02-08
  • 1970-01-01
  • 1970-01-01
  • 2016-06-16
  • 2021-12-01
  • 1970-01-01
相关资源
最近更新 更多