Development
Steps for new developers to get up and running with the Bend data-service
Dependencies
You will need Rust, NodeJS, and a number of other tools to develop properly on the data-service and dash
- Rust stable
- NodeJS LTS
- For formatting, you'll need
rustfmt
rustup component add rustfmt
Setting up the database
- Install Postgres
- Install diesel for Postres:
cargo install diesel_cli --no-default-features --features postgres
- Copy
example.env
to .env
(should just work with default local config) - Run
diesel setup
Run the app
cargo run
Dash
The Dash is a CRA app that can be used to interact with the API locally. It is not currently intended for production use. To get started, you'll need to run Quicktype to generate the schema.json file used by processSchema.ts
and run the CRA app in a separate terminal from the one running the Rust back-end.
- Start the server:
cargo.run
- In a separate terminal, run quicktype:
npm run quicktype
- Navigate to the dash:
cd dash
- Start the app:
npm run start
Publishing the Image
- Install Google Cloud SDK
- Ensure you have access to the Container Registrar service account in GCP IAM & Admin
- Run
gcloud auth login
using an account with access to the Container Registrar - Run
docker tag tcmoore/bend-api-service gcr.io/{PROJECT_ID}/api-service
(You can find the project id here) - Run
docker push gcr.io/bend-330614/api-service
DB Connectivity
Note that bend-db
indicates the Cloud SQL instance, while bend_db
indicates the postgres database name
Setting up a new database
- Create a new Postgres instance in Cloud SQL and store the root password somewhere secure
- Wait for the instance to boot up, then connect:
- Run
gcloud sql connect bend-db --user=postgres --project PROJECT_ID
and enter your password - You can now run
diesel setup
- Using:
DATABASE_URL=postgres://postgres:{ROOT_PASSWORD}@{YOUR_DB_PUBLIC_IP}/bend_db
Running migrations
- Run
gcloud sql connect bend-db --user=postgres --project PROJECT_ID
and enter your password - You can now run migrations for 5 minutes with Diesel with
diesel migration run
- Using:
DATABASE_URL=postgres://postgres:{ROOT_PASSWORD}@{YOUR_DB_PUBLIC_IP}/bend-db
Connecting Cloud Run to Cloud SQL
Steps to connect to Cloud SQL from the api service in the cloud environment:
- Ensure that a service account exists with the Cloud SQL Client permissions
- Deploy a new revision of the Cloud Run instance with a Connection enabled (in the Connections tab) to the SQL instance
- In Cloud Run, the DATABASE_URL must take a slightly different form to support the unix socket path
postgres://{USER}:{PASSWORD}@?host=/cloudsql/{CLOUD_SQL_CONNECTION_NAME}&dbname=bend_db
See Official Docs for additional details.