Я развертываю приложение, которое требует, чтобы информация о БД передавалась как отдельные аргументы, например,
$ someapp --db-host=example.com --db-port=5433 --db-name=mydb --db-user=me --db-password=mypass
Если посмотреть на то, что предлагает heroku
, то похоже, что единственная доступная вещь - это DATABASE_URL
.Конечно, я могу разобрать его значение в Procfile
и извлечь все необходимое, в настоящее время я думаю о чем-то вроде небольшого вспомогательного скрипта, например parse_db_url.py
:
#!/usr/bin/env python3
import os
from sqlalchemy.engine.url import make_url
if __name__ == '__main__':
url = make_url(os.environ.get('DATABASE_URL'))
env = f'''PG_USER={url.username}
PG_PASSWORD={url.password}
PG_HOST={url.host}
PG_PORT={url.port}
PG_DBNAME={url.database}'''
print(env)
и eval
ingэто в Procfile
:
web: eval $(python parse_db_url.py) && someapp --db-host=$PG_HOST ...
и т. д., но это правильный способ сделать это или я просто что-то упускаю?Если это уместно, я тестирую на бесплатном плане, но перехожу к плану хобби, когда доволен развертыванием.