Files
grecia/docs/es/installation/docker.md
Javi Martín 170530e52e 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
2024-10-07 15:23:40 +02:00

4.8 KiB

Usando Docker para desarrollo en local

Prerrequisitos

Debes tener instalados Docker y Docker Compose en tu ordenador. El proceso de instalación depende de tu sistema operativo.

macOS

Puedes seguir la guía oficial de Docker.

O, si tienes instalado homebrew, puedes ejecutar:

brew install docker
brew install docker-compose
brew install --cask docker
open -a docker

La aplicación de Docker te pedirá darle permisos e introducir tu contraseña.

Linux

  1. Instala Docker y Docker Compose. Por ejemplo, en Ubuntu 22.04:
sudo apt-get install docker.io docker-compose-v2

Windows

La documentación oficial de Docker incluye una página con instrucciones para instalar Docker Desktop en Windows. En esa página, descarga Docker Desktop para Windows y ejecútalo.

Instalación

Clona el repositorio en tu ordenador y entra en el directorio:

git clone https://github.com/consuldemocracy/consuldemocracy.git
cd consuldemocracy

A continuación, crea los ficheros de config/secrets.yml y config/database.yml basados en los ficheros de ejemplo:

cp config/secrets.yml.example config/secrets.yml
cp config/database.yml.example config/database.yml

Ahora genera la imagen con:

POSTGRES_PASSWORD=password docker-compose build

Y crea los contenedores:

POSTGRES_PASSWORD=password docker-compose create

Por último, crea la base de datos e introduce datos de prueba:

POSTGRES_PASSWORD=password docker-compose run app rake db:create db:migrate
POSTGRES_PASSWORD=password docker-compose run app rake db:dev_seed

Arranque de Consul Democracy en desarrollo

Una vez instalada, puedes lanzar la aplicación con:

POSTGRES_PASSWORD=password docker-compose up

Y podrás acceder a la aplicación desde tu navegador visitando http://localhost:3000.

Adicionalmente, si quieres lanzar por ejemplo la consola de rails:

POSTGRES_PASSWORD=password docker-compose run app rails console

Para verificar que los contenedores están ejecutándose usa:

docker ps

Deberías obtener algo similar a:

CONTAINER ID   IMAGE                 COMMAND                  CREATED          STATUS          PORTS      NAMES
603ec83b78a6   consuldemocracy-app   "./docker-entrypoint…"   23 seconds ago   Up 22 seconds              consuldemocracy-app-run-afb6d68e2d99
d57fdd9637d6   postgres:13.16        "docker-entrypoint.s…"   50 minutes ago   Up 22 seconds   5432/tcp   consuldemocracy-database-1

Ejecutar tests con RSpec

Consul Democracy incluye más de 6000 tests que comprueban la manera en que se comporta la aplicación. Si bien recomendamos que configures tu "fork" para que use un sistema de integración continua para ejecutar todos los tests y comprobar que los últimos cambios no rompen nada, durante el desarrollo probablemente quieras ejecutar tests relacionados con el código en el que estás trabajando.

En primer lugar, prepara la base de datos para el entorno de test:

POSTGRES_PASSWORD=password docker-compose run app bundle exec rake db:test:prepare

Ahora puedes ejecutar tests usando RSpec. Por ejemplo, para ejecutar los tests del modelo "proposal":

POSTGRES_PASSWORD=password docker-compose run app bundle exec rspec spec/models/proposal_spec.rb

Los tests de sistema también funcionan sin que tengas que realizar ninguna configuración adicional, si bien la primera vez que se ejecutan pueden fallar mientras la herramienta que ejecuta los tests descarga una versión adecuada de Chromedriver (que se necesita para ejecutarlos), y solamente puedes ejecutar el modo "headless" (con un navegador ejecutándose en segundo plano), que por otro lado en cualquier caso es el modo que utilizarías más del 95% del tiempo. Por ejemplo, para ejecutar los tests de la página de inicio:

POSTGRES_PASSWORD=password docker-compose run app bundle exec rspec spec/system/welcome_spec.rb

Resolución de problemas

Ejecuta los siguientes comandos en el directorio de Consul Democracy para borrar todas las imágenes y contenedores anteriores del Docker de Consul Democracy. Luego, comienza de nuevo con el proceso de instalación de Docker.

  1. Quita todas las imágenes de Consul Democracy:
docker-compose down --rmi all -v --remove-orphans
  1. Quita todos los contenedores de Consul Democracy:
docker-compose rm -f -s -v
  1. Verifica si todavía hay algún contenedor:
docker ps -a
  1. En caso afirmativo, elimina cada uno de forma manual:
docker container rm <container_id>