在部署时间内在Heroku上重置Postgres数据库

时间:2019-01-31 07:07:37

标签: django postgresql heroku gitlab-ci heroku-postgres

我有一个带有PostgreSQL后端的Django网站,我正在使用gitlab ci / cd对其进行测试并将其部署在Heroku上。

我每次都对模型进行很多新的更改,并且我希望在Heroku运行之前清理数据库:python manage.py migrate。 我知道我可以每次在计算机上运行heroku pg: reset DATABASE,但是我正在寻找一种自动进行此操作的方法,作为部署的步骤。

这是我的.giltab-ci.yml文件的内容:

image: python:3.6.5

services:
  - postgres:latest

variables:
  POSTGRES_DB: asdproject
  POSTGRES_USER: postgres
  POSTGRES_PASSWORD: asdpassword

test:
  script:
  - whoami
  - export PGPASSWORD=$POSTGRES_PASSWORD
  - apt-get update -qy
  - apt-get install -y python-dev python-pip
  - pip install -r requirements.txt
  - python manage.py test --settings=backend_settings.gitlab_runner_settings


production:
   type: deploy
   script:
      - apt-get update -qy
      - apt-get install -y ruby-dev
      - gem install dpl
      - dpl --provider=heroku --app=asd-g7 --api-key=$HEROKU_PRODUCTION_API_KEY
 only:
     - master

我应该在哪里放置reset命令?以及如何?

1 个答案:

答案 0 :(得分:0)

Heroku的release phase是您要寻找的。它的主要用例之一是与新版本一起运行数据库操作。您可以在release中定义一个Procfile进程。例如,典型的Rails应用的迁移可能看起来像这样:

web: bundle exec puma -C config/puma.rb
worker: bundle exec sidekiq
release: bundle exec rake db:migrate

您希望在release进程中为应用程序交换适当的重置命令。