Как потребовать разные пакеты на Heroku для локальной коробки?

Я пишу приложение Python Flask для развертывания на Героку. Он будет использовать базу данных. Для локальной разработки я бы хотел использовать Sqlite, но при развертывании в Heroku я бы хотел использовать Postgresql. Как я могу этого добиться?

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


Если бы это было приложение Ruby, я бы написал в своем Gemfile

gem "pg", :group => :production
gem "sqlite3", :group => :development

Затем Бандлер устанавливал соответствующие пакеты в процессе разработки и производства. Но я не знаю аналогичного рабочего процесса для пипа Python


person Colonel Panic    schedule 27.11.2012    source источник
comment
Награда предназначалась для этого вопроса stackoverflow.com/questions/13868503/   -  person Colonel Panic    schedule 14.12.2012


Ответы (1)


Ну, тебе нужно решить две вещи.

Во-первых, requirements.txt, что не так уж и сложно. Вы можете либо добавить все требования в один и тот же файл requirements.txt, установка обеих привязок к базе данных ничего не повредит. Однако, если вы хотите разделить, просто используйте requirements.txt для развертывания и requirements-dev.txt для локальной разработки.

Более важными являются сами настройки БД, и для этого у вас есть однострочное решение:

app.config['SQLALCHEMY_DATABASE_URI'] = os.environ.get(
    'DATABASE_URL', 'sqlite:////tmp/test.db')

Так как DATABASE_URL установлен на Heroku, а не на локальном (убедитесь, что это так), os.environ.get не найдет его, таким образом вернувшись к значению по умолчанию, которое является строкой подключения sqlite.

person Yuval Adam    schedule 28.11.2012
comment
У меня такая же ситуация, за исключением того, что я хочу запускать Postgres локально. Что такое строка подключения Postgres? Спасибо. - person Rohit Rayudu; 09.12.2012
comment
Да, я понял - я просто по какой-то причине неправильно установил Postgres, поэтому мне пришлось переустановить, чтобы он заработал. - person Rohit Rayudu; 10.12.2012