From a92bbc6bcbbc3843c50651ddc65d2eee3f0f15f3 Mon Sep 17 00:00:00 2001 From: Matt Paul Date: Wed, 25 Nov 2020 17:18:19 +0000 Subject: [PATCH] Add docker-compose and .env --- examples/postgres/mockable-todos/.env.example | 1 + examples/postgres/mockable-todos/README.md | 22 ++++++++++++++++--- .../mockable-todos/docker-compose.yml | 17 ++++++++++++++ examples/postgres/mockable-todos/src/main.rs | 2 ++ 4 files changed, 39 insertions(+), 3 deletions(-) create mode 100644 examples/postgres/mockable-todos/.env.example create mode 100644 examples/postgres/mockable-todos/docker-compose.yml diff --git a/examples/postgres/mockable-todos/.env.example b/examples/postgres/mockable-todos/.env.example new file mode 100644 index 00000000..31adef00 --- /dev/null +++ b/examples/postgres/mockable-todos/.env.example @@ -0,0 +1 @@ +DATABASE_URL="postgres://postgres:password@localhost/todos" diff --git a/examples/postgres/mockable-todos/README.md b/examples/postgres/mockable-todos/README.md index 6b44e174..d74367de 100644 --- a/examples/postgres/mockable-todos/README.md +++ b/examples/postgres/mockable-todos/README.md @@ -6,19 +6,27 @@ This example is based on the ideas in [this blog post](https://medium.com/better ## Setup -1. Declare the database URL +1. Run `docker-compose up -d` to run Postgres in the background. + +2. Declare the database URL, either by exporting it: ``` export DATABASE_URL="postgres://postgres:password@localhost/todos" ``` -2. Create the database. + or by making a `.env` file: + + ``` + cp .env.example .env + ``` + +3. Create the database. ``` $ sqlx db create ``` -3. Run sql migrations +4. Run sql migrations ``` $ sqlx migrate run @@ -43,3 +51,11 @@ List all todos ``` cargo run ``` + +## Cleanup + +To destroy the Postgres database, run: + +``` +docker-compose down --volumes +``` diff --git a/examples/postgres/mockable-todos/docker-compose.yml b/examples/postgres/mockable-todos/docker-compose.yml new file mode 100644 index 00000000..baa30f90 --- /dev/null +++ b/examples/postgres/mockable-todos/docker-compose.yml @@ -0,0 +1,17 @@ +version: "3" + +services: + database: + image: "postgres" + ports: + - "5432:5432" + restart: always + environment: + - POSTGRES_USER=postgres + - POSTGRES_PASSWORD=password + - POSTGRES_DB=todos + volumes: + - database_data:/var/lib/postgresql/data +volumes: + database_data: + driver: local diff --git a/examples/postgres/mockable-todos/src/main.rs b/examples/postgres/mockable-todos/src/main.rs index 3e01e1a1..340faf80 100644 --- a/examples/postgres/mockable-todos/src/main.rs +++ b/examples/postgres/mockable-todos/src/main.rs @@ -1,4 +1,5 @@ use async_trait::async_trait; +use dotenv; use sqlx::postgres::PgPool; use sqlx::Done; use std::{env, io::Write, sync::Arc}; @@ -19,6 +20,7 @@ enum Command { #[async_std::main] #[paw::main] async fn main(args: Args) -> anyhow::Result<()> { + dotenv::dotenv().ok(); let pool = PgPool::connect(&env::var("DATABASE_URL")?).await?; let todo_repo = PostgresTodoRepo::new(pool); let mut writer = std::io::stdout();