簡體   English   中英

如何配置database.yml在本地環境和Docker中都能工作?

[英]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 vars Luke。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM