Unify database configuration files
We had three files that were almost identical, and we can use environment variables to specify the differences. Note we're using the `PGUSER` and `PGPASSWORD` variables, since these variables will automatically be used by the PostgreSQL client when we have a blank `username` and `password` keys in the `database.yml` file (which we did until now). The difference between these variables and the `POSTGRES_USER` and `POSTGRES_PASSWORD` variables is that the `PG` variables are used by the client connecting to the database, while the `POSTGRES_` variables are used by the Docker postgresql image when creating the database superuser. For consistency with the code in our github workflows (and everywhere else in the postgres world), we're respecting this double standard. The fact that there are two different names for what's basically the same thing makes the code confusing, though, particularly when running the docker-compose commands, since we get the password from an environment variable but we have to assign two different environment variables with it. So we're accepting both `PGPASSWORD` and `POSTGRES_PASSWORD` variables in the database configuration file. This way, developers using docker-compose can use `POSTGRES_PASSWORD` for everything and it'll work fine. We're also making `PGPASSWORD` default to `POSTGRES_PASSWORD` so we don't get a warning if we only set `POSTGRES_PASSWORD`: ``` WARN[0000] The "PGPASSWORD" variable is not set. Defaulting to a blank string. ``` Also note we're using `DB_HOST` instead of `PGHOST` because that's the variable Rails currently uses by default for new applications [1]. Finally, note we're using `.presence` in the `ENV` calls in the database.yml file. The `PGPASSWORD` variable was set to an empty string when running docker-compose, so using `ENV["PGPASSWORD"] ||` wouldn't work. [1] https://github.com/rails/rails/blob/c90a8701e5/railties/lib/rails/generators/rails/app/templates/config/databases/postgresql.yml.tt#L22
This commit is contained in:
@@ -12,6 +12,9 @@ tests:
|
||||
paths:
|
||||
- vendor/
|
||||
variables:
|
||||
DB_HOST: postgres
|
||||
PGUSER: consul
|
||||
PGPASSWORD: password
|
||||
POSTGRES_USER: consul
|
||||
POSTGRES_PASSWORD: password
|
||||
RAILS_ENV: test
|
||||
@@ -20,7 +23,6 @@ tests:
|
||||
script:
|
||||
- apt-get update && apt-get install -y nodejs npm chromium
|
||||
- for i in config/*.example; do cp "$i" "${i/.example}"; done
|
||||
- for i in config/*.gitlab; do cp "$i" "${i/.gitlab}"; done
|
||||
- bundle --without development
|
||||
- npm clean-install
|
||||
- bundle exec rake db:setup
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
default: &default
|
||||
adapter: postgresql
|
||||
encoding: unicode
|
||||
#host: localhost
|
||||
host: database #<--the name of the db in the docker-compose
|
||||
pool: 5
|
||||
port: 5432
|
||||
schema_search_path: "public,shared_extensions"
|
||||
username: postgres
|
||||
password: <%= ENV["POSTGRES_PASSWORD"] %>
|
||||
|
||||
development: &development
|
||||
<<: *default
|
||||
database: consul_development
|
||||
|
||||
# The staging, preproduction and production dbs are only needed
|
||||
# for running rake assets:precompile locally before deploying
|
||||
staging:
|
||||
<<: *development
|
||||
|
||||
preproduction:
|
||||
<<: *development
|
||||
|
||||
production:
|
||||
<<: *development
|
||||
|
||||
test:
|
||||
<<: *default
|
||||
database: consul_test
|
||||
@@ -1,11 +1,11 @@
|
||||
default: &default
|
||||
adapter: postgresql
|
||||
encoding: unicode
|
||||
host: localhost
|
||||
host: <%= ENV["DB_HOST"].presence || "localhost" %>
|
||||
pool: 5
|
||||
schema_search_path: "public,shared_extensions"
|
||||
username:
|
||||
password:
|
||||
username: <%= ENV["PGUSER"].presence %>
|
||||
password: <%= ENV["PGPASSWORD"].presence || ENV["POSTGRES_PASSWORD"].presence %>
|
||||
|
||||
development: &development
|
||||
<<: *default
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
default: &default
|
||||
adapter: postgresql
|
||||
encoding: unicode
|
||||
host: postgres
|
||||
pool: 5
|
||||
schema_search_path: "public,shared_extensions"
|
||||
username: consul
|
||||
password: password
|
||||
|
||||
test:
|
||||
<<: *default
|
||||
database: consul_test
|
||||
@@ -6,6 +6,7 @@ services:
|
||||
# see https://hub.docker.com/_/postgres/
|
||||
image: postgres:13.16
|
||||
environment:
|
||||
- POSTGRES_USER=postgres
|
||||
- POSTGRES_PASSWORD=$POSTGRES_PASSWORD
|
||||
# persist the database between containers by storing it in a volume
|
||||
volumes:
|
||||
@@ -34,6 +35,9 @@ services:
|
||||
- bundle:/usr/local/bundle
|
||||
- node_modules:/var/www/consul/node_modules
|
||||
environment:
|
||||
- DB_HOST=database # Same name as the database service
|
||||
- PGUSER=postgres
|
||||
- PGPASSWORD=${PGPASSWORD-$POSTGRES_PASSWORD}
|
||||
- POSTGRES_PASSWORD=$POSTGRES_PASSWORD
|
||||
volumes:
|
||||
db_data: {}
|
||||
|
||||
@@ -44,7 +44,7 @@ Then create the secrets and database config files based on the example files:
|
||||
|
||||
```bash
|
||||
cp config/secrets.yml.example config/secrets.yml
|
||||
cp config/database-docker.yml.example config/database.yml
|
||||
cp config/database.yml.example config/database.yml
|
||||
```
|
||||
|
||||
Then build the image with:
|
||||
|
||||
@@ -44,7 +44,7 @@ A continuación, crea los ficheros de `config/secrets.yml` y `config/database.ym
|
||||
|
||||
```bash
|
||||
cp config/secrets.yml.example config/secrets.yml
|
||||
cp config/database-docker.yml.example config/database.yml
|
||||
cp config/database.yml.example config/database.yml
|
||||
```
|
||||
|
||||
Ahora genera la imagen con:
|
||||
|
||||
Reference in New Issue
Block a user