Proyecto reto de desarrollo de API para obtener distintas Noticias.
- Obtener toda información de las noticias registradas en base de datos en formato JSON.
- Registrar, eliminar y presentar la información de una noticia o fuente.
- Carga de información en base de datos a través de comandos desde News API.
Para la ejecución del proyecto se requiere como mínimo:
- Git - Sistema de control de versiones distribuido de código abierto y gratuito.
- Ruby - Lenguaje de programación interpretado, reflexivo y orientado a objetos.
- PostgreSQL - Sistema gestor de bases de datos relacional.
- Docker - Plataforma que permite el despligue automático de aplicaciones en contenedores.
- Visual Studio Code - Visual Studio Code es un editor de código fuente multiplataforma. (Puede usar cualquier IDE o editor de texto como: RubyMine, Aptana, etc...).
Para ejecutar el proyecto se requiere tener PostgreSQL localmente. Otro medio es usar contenedores por lo cual se describe la solución usando Docker:
- Descargar la imagen:
docker pull postgres:latest
- Crear un volumen para datos del contenedor:
docker network create rails-postgres-nt
- Crear un volumen para datos del contenedor:
docker volume create postgres-vl
- Contruir el contenedor con las configuraciones correspondientes:
docker run -d --name postgres-ct -p 5432:5432 --network rails-postgres-nt -e POSTGRES_PASSWORD=<clave> -e POSTGRES_USER=<usuario> -v postgres-vl:/var/lib/postgresql/data postgres:latest
- Obtener y guardar la clave maestra del proyecto en variable de entorno del sistema:
export RAILS_MASTER_KEY=$(curl -sS https://gist.githubusercontent.com/edgewl2/41646a96ed0eb106671f466786b815b9/raw/21bb726dfd752619acb3aa88820a47ecbb061ab5/masterKey.txt)
- Guardar en una variable de entorno del sistema:
git clone https://github.com/edgewl2/ror_news_api.git news_backend
- Acceder al directorio raíz del proyecto:
cd news_backend
- Crear las bases de datos:
rails db:setup
- Realizar la migracion de entidades:
rails db:migrate
- Cargar información en base de datos:
Existen dos formas de realizar este proceso por CLI, usando una rake task y a través de seeds.
rails db_fetch:fillrails db:seed
- Iniciar servidor:
rails server
Se puede realizar de dos maneras diferentes.
- Usando Docker Compose
- Ejecutar los servicios de la aplicación configurados:
docker-compose up -dNOTA: En este momento se pueden realizar las pruebas correspondientes usando un cliente REST como: Postman, Insomnia, o el Front-end desarrollado.
- Detener y eliminar los servicios:
docker-compose down
- Usando Docker Engine
- Construir la imagen a partir:
docker build . -t edgewl2/rails:latest
- Obtener la dirección IP usada por el contenedor PostgreSQL a través de su información:
docker container inspect postgres-ct | jq '.[0].NetworkSettings.Networks | .[].IPAddress'Otra alternativa es conseguirla a través de la información de la red asociada:
docker network inspect rails-postgres-nt | jq '.[0].Containers | .[].IPv4Address / "/" | .[0]'
- Guardamos la dirección IP en una variable de entorno del sistema:
export POSTGRES_HOST=<IP contenedor>
- Creamos el contenedor del API Rails:
docker run -d --name news-api-ct -p 3000:3000 --network rails-postgres-nt -e RAILS_MASTER_KEY=$RAILS_MASTER_KEY -e POSTGRES_HOST=$POSTGRES_HOST edgewl2/rails:latestNOTA: En este momento se pueden realizar las pruebas correspondientes usando un cliente REST como: Postman, Insomnia, o el Front-end desarrollado.
- Parar los contenedores:
docker stop $(docker ps -q)