Настройка базы данных postgresql для локальной разработки в Django при использовании Heroku

Я знаю, что вокруг есть много вопросов, связанных с подобными проблемами, но я думаю, что у меня есть особый вкус, который еще не был рассмотрен. Я пытаюсь создать свою локальную базу данных postgresql, чтобы я мог делать локальную разработку в дополнение к нажатию на Heroku.

Я нашел основные ответы о том, как это сделать, например (что, по моему мнению, является устаревшим):

'#DATABASES = {'default': dj_database_url.config(default='postgres://fooname:[email protected]/dbname')}'

Это решает, что "ДВИГАТЕЛЬ" не настроен на ошибку. Однако, когда я запускаю "python manage.py syncdb", я получаю следующую ошибку:

 'OperationalError: FATAL:  password authentication failed for user "foo"
 FATAL:  password authentication failed for user "foo"'

Это происходит для всех возможных комбинаций имени пользователя/пароля. Таким образом, мое имя пользователя/пароль ubuntu, мое имя пользователя/пароль и т.д. Также это происходит, если я просто попытаюсь вынуть компонент Heroku и построить его локально, как если бы я использовал postgresql, следуя руководству. Поскольку у меня еще нет базы данных, к чему относятся эти значения имени пользователя/пароля? Является ли проблема именно тем, что мне нужно сначала создать базу данных? Если да, то как?

В качестве побочной заметки я знаю, что могу получить db от heroku, используя описанный здесь процесс: Должен ли я иметь каталог Postgres рядом с моей папкой проекта? Если да, то как?

Но если я буду делать это, где будет жить новый db, как django знает, как получить к нему доступ, и у меня будут те же проблемы с пользователем/паролем?

Спасибо, куча.

Ответ 1

Предполагая, что у вас установлены postgres, подключитесь через pgadmin или psql и создайте нового пользователя. Затем создайте новую базу данных и новый пользователь в качестве владельца. Убедитесь, что вы можете подключиться через psql с новым пользователем в базу данных. вам нужно будет настроить переменную env в вашем файле postactivate в вашей папке bin virtualenv и сохранить ее. Вот что я имею для базы данных:

export DATABASE_URL='postgres://{{username}}:{{password}}@localhost:5432/{{database}}'

Просто примечание: добавление этого значения в ваш postactivate не делает ничего. Файл не запускается при сохранении. Вам нужно либо запустить это в командной строке $, либо просто отключить и активировать ваш virtualenv.

Ваш файл settings.py должен читать из этого env var:

DATABASES = {'default': dj_database_url.config()}

Затем вы настроите Heroku с помощью своего инструмента CLI для использования вашей производственной базы данных при развертывании. Что-то вроде:

heroku config:set DATABASE_URL={{production value here}}

(если у вас нет установленного инструмента CLI Heroku, вам нужно это сделать)

Если вам нужно понять, как именно то, что вам нужно для вашей производственной базы данных, вы можете получить его, войдя в поддомену postgresql heroku (на момент написания, https://postgres.heroku.com/) и выбрав db из списка и посмотрев значение "Параметры подключения: URL".

Таким образом, то же самое значение settings.py будет работать как для локального, так и для производственного процесса, и вы сохраните свои имена пользователей/пароли вне контроля версий. Это просто значения конфигурации env.