airbnb/knowledge-repo

Unable to get Postgres connections working

jannepeltola opened this issue · 0 comments

Hello,

I've been trying to get an instance set up for a while and I'm pretty much stumped. The basic idea was to spin up a Postgres DB and a separate Docker image for the Repo, like this:

docker-compose.yml:

version: '3'
services:
  repo:
    build: .
    ports:
      - "7000:7000"
    environment:
      REPO: postgresql://postgres:test@db/knowledge_repo:knowledge_repo
      DBURI: postgresql://postgres:test@db/knowledge_repo_app
      PGPASSWORD: test
  db:
    image: postgres
    restart: always
    ports:
      - "5432:5432"
    environment:
      POSTGRES_PASSWORD: test

Dockerfile:

FROM python:3.8

# Install Knowledge Repo
COPY requirements.txt .
RUN pip install -r requirements.txt

# Install mysql-client for setup
RUN apt-get update
RUN apt-get install -y postgresql-client

# Move configs over
WORKDIR /work
COPY files/config.py config.py

# Start application
COPY start.sh /start.sh
ENTRYPOINT ["/start.sh"]

start.sh:

#!/bin/bash

sleep 5

echo "SELECT 'CREATE DATABASE knowledge_repo' WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'mydb')\gexec" | psql -h db -U postgres
echo "SELECT 'CREATE DATABASE knowledge_repo_app' WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'mydb')\gexec" | psql -h db -U postgres

knowledge_repo --repo $REPO init
knowledge_repo --repo $REPO db_upgrade --dburi $DBURI
knowledge_repo --repo $REPO runserver --dburi $DBURI --config config.py
#knowledge_repo --repo $REPO deploy --config config.py --dburi $DBURI

The app starts fine, and I'm able to see the web UI. However, when I try to init a repo, I get this:

$ docker exec -it knowledgerepo_repo_1 knowledge_repo --repo postgresql://postgres:test@db/knowledge_repo:knowledge_repo init
Traceback (most recent call last):
 File "/usr/local/bin/knowledge_repo", line 247, in <module>
   repo = knowledge_repo.KnowledgeRepository.create_for_uri(args.repo)
 File "/usr/local/lib/python3.8/site-packages/knowledge_repo/repository.py", line 70, in create_for_uri
   return cls._get_subclass_for(scheme).create(uri, **kwargs)
 File "/usr/local/lib/python3.8/site-packages/knowledge_repo/repository.py", line 74, in create
   raise NotImplementedError
NotImplementedError

This is not a configuration issue, since I'm able to run this Python script successfully:

import sqlalchemy as sa
engine = sa.create_engine('postgresql://postgres:test@db/knowledge_repo')
conn = engine.connect()
res = conn.execute("SELECT * FROM pg_catalog.pg_tables")
for row in res:
    print(row)
conn.close()

->

$ docker exec -it knowledgerepo_repo_1 python test.py
('public', 'knowledge_repo', 'postgres', None, True, False, False, False)
[...]

So, what am I doing wrong?