假设我的一些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