ruby-on-rails - 如何配置 database.yml 以在本地环境和 Docker 中工作?

标签 ruby-on-rails database docker

假设我的一些 Rails 同事更喜欢在他们自己设置的本地本地开发环境中开发应用程序以满足他们的需求,而我的一些同事更喜欢开发从内部运行的应用程序预装了所有必要工具的 Docker 容器。

现在有 config/database.yml目前看起来像下面这样以匹配所有本地人的设置,并且以 bin/rails db:setup 开头.

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

development:
  <<: *default
  database: myapp_development

test:
  <<: *default
  database: myapp_test

但是 Docker 人员确实需要以下内容——最重要的是不同的主机——并且它将以 docker-compose run web bin/rails db:setup 开头.由于主机现在不同了这个 database.yml对本地人来说不再适用。

default: &default
  adapter: postgresql
  encoding: unicode
  host: db
  username: postgres
  password:
  pool: 5

development:
  <<: *default
  database: myapp_development

test:
  <<: *default
  database: myapp_test

同时涵盖这两个用例的最方便或侵入性较小的方法是什么?我可以动态获取主机值吗?如何?来自环境变量?来自不同的 database.yml?然后如何告诉 Rails 取而代之?

注意:Docker 设置基本上遵循https://docs.docker.com/compose/rails

最佳答案

使用环境变量 Luke。

ENV['DATABASE_URL']database.yml 中的设置合并,并优先于文件中的值。

为避免开发者大战,database.yml 应仅包含最低限度的设置,例如适配器、编码和数据库的默认名称:

default: &default
  adapter: postgresql
  encoding: unicode

development:
  <<: *default
  database: myapp_development

test:
  <<: *default
  database: myapp_test

主机、密码等任何其他内容都应由 ENV['DATABASE_URL'] 设置,因为这是本地配置 - 不是应用程序配置。出于安全原因,这也是可取的,因为它消除了密码随源代码泄露的风险。

参见:

关于ruby-on-rails - 如何配置 database.yml 以在本地环境和 Docker 中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49038091/

相关文章:

mysql - 我如何在mysql中编写一个触发器来在插入之前检查重复记录

docker - headless (headless) Protractor 不分片测试

ruby-on-rails - 如何计算日期范围内每一天的记录

ruby-on-rails - 获取每个用户的文件夹大小和所有内容

ruby-on-rails - 使用OAuth从Twitter获取名字/姓氏/电子邮件

SQL 查询 ORDER BY 两个条件无法正常工作 - 我做错了什么?

ruby-on-rails - file_field 在我的 Rails 表单中不具有粘性

database - Flutter:将数据从第一屏幕发送到第二屏幕

windows - 在 Windows dockerfile 中转义美元符号

docker - 如何在Docker sh入口点修复 'Permission denied'