[英]How to configure database.yml to work in a local environment and in Docker both?
假設我的一些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
一次覆蓋兩個用例的最便捷或較不麻煩的方式是什么? 我可以動態獲取主機值嗎? 怎么樣? 從環境變量? 來自不同的數據庫。 然后如何告訴Rails改用它呢?
注意:Docker設置基本上遵循https://docs.docker.com/compose/rails
ENV['DATABASE_URL']
與database.yml
的設置合並,並優先於file中的值。
為了避免開發人員大戰, database.yml
只應包含database.yml
的最小設置,如適配器,編碼和默認名稱:
default: &default
adapter: postgresql
encoding: unicode
development:
<<: *default
database: myapp_development
test:
<<: *default
database: myapp_test
其他任何內容,例如主機,密碼,都應由ENV['DATABASE_URL']
設置,因為這是本地配置,而不是應用程序配置。 由於安全原因,這也是可取的,因為它消除了密碼隨源代碼泄漏的風險。
看到:
只需從docker-compose.yml
安裝第二個特定於docker-compose.yml
database.yml
docker-compose.yml
:
version: '3'
services:
db:
image: postgres
web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/myapp
- ./docker/database.yml:/myapp/config/database.yml # Here we go!
ports:
- "3000:3000"
depends_on:
- db
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.