ruby-on-rails – 如何配置database.yml以在本地环境和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运行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

什么是最方便或更少侵入性的方式同时涵盖两个用例?我可以动态获取主机值吗?怎么样?从env变量?来自不同的database.yml?那么如何告诉Rails取而代之呢?

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

最佳答案 使用ENV vars Luke.

ENV [‘DATABASE_URL’]与database.yml中的设置合并,优先于file中的值.

为了避免开发人员战争,database.yml应该只包含最少的设置,例如适配器,编码和DB的默认名称:

default: &default
  adapter: postgresql
  encoding: unicode

development:
  <<: *default
  database: myapp_development

test:
  <<: *default
  database: myapp_test

其他任何东西,如主机,密码应由ENV [‘DATABASE_URL’]设置,因为这是本地配置 – 而不是应用程序配置.出于安全原因,这也是优选的,因为它消除了密码被源代码泄露的风险.

看到:

> http://guides.rubyonrails.org/configuring.html#configuring-a-database
> https://12factor.net/config

点赞