Настройка базы данных 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.