Подтвердить что ты не робот

Heroku Review Apps: копировать БД для просмотра приложения

Попытка полностью автоматизировать Heroku Обзор приложений (бета) для приложения. Heroku хочет, чтобы мы использовали db/seeds.rb, чтобы засеять недавно созданный экземпляр DB.

У нас нет приложения db/seeds.rb с этим приложением. Мы хотели бы создать script, чтобы скопировать существующую БД из текущего родителя (промежуточной) и использовать это как БД для нового рассматриваемого приложения.

Это можно сделать вручную:

heroku pg:copy myapp::DATABASE_URL DATABASE_URL --app myapp-pr-1384 --confirm myapp-pr-1384

Но я не могу понять, как получить имя приложения, которое Heroku создает в postdeploy script.

Кто-нибудь пробовал это и знал, как он может быть автоматизирован?

4b9b3361

Ответ 1

Я столкнулся с этой проблемой, и вот как я ее решил.

  • Настройте URL-адрес базы данных, который вы хотите скопировать из переменной среды в базовом приложении для конвейера. В моем случае это STAGING_DATABASE_URL. Формат URL-адреса postgresql://username:[email protected]:port/db_name.

  • В вашем файле app.json обязательно скопируйте эту переменную.

  • В вашем предложении app.json появится новая база данных, которая установит переменную среды DATABASE_URL.

  • Используйте следующую script для копирования по базе данных pg_dump $STAGING_DATABASE_URL | psql $DATABASE_URL

Вот мой app.json файл для справки:

{
  "name": "app-name",
  "scripts": {
    "postdeploy": "pg_dump $STAGING_DATABASE_URL | psql $DATABASE_URL && bundle exec rake db:migrate"
  },
  "env": {
    "STAGING_DATABASE_URL": {
      "required": true
    },
    "HEROKU_APP_NAME": {
      "required": true
    }
  },
  "formation": {
    "web": {
      "quantity": 1,
      "size": "hobby"
    },
    "resque": {
      "quantity": 1,
      "size": "hobby"
    },
    "scheduler": {
      "quantity": 1,
      "size": "hobby"
    }
  },
  "addons": [
    "heroku-postgresql:hobby-basic",
    "papertrail",
    "rediscloud"
  ],
  "buildpacks": [
    {
      "url": "heroku/ruby"
    }
  ]
}

Ответ 2

Альтернативой является обмен базой данных между обзорными приложениями. Вы можете наследовать DATABASE_URL в вашем файле app.json.

PS: Этого достаточно для моего дела, который является небольшой командой, имейте в виду, что, возможно, этого недостаточно для вас. И я держу свое производство и проверяю (или организую, или dev, как вы его называли) разделенные данные.

Ответ 3

В качестве альтернативы: Еще одно решение с использованием pg_restore, благодаря https://gist.github.com/Kalagan/1adf39ffa15ae7a125d02e86ede04b6f

{
  "scripts": {
    "postdeploy": "pg_dump -Fc $DATABASE_URL_TO_COPY | pg_restore --clean --no-owner -n public -d $DATABASE_URL && bundle exec rails db:migrate"
  }
}

Ответ 4

Я столкнулся с проблемой за проблемой, пытаясь заставить это работать. Этот сценарий после развертывания наконец-то сработал для меня:

pg_dump -cOx $STAGING_DATABASE_URL | psql $DATABASE_URL && bundle exec rails db:migrate

Ответ 5

Я вижу && bundle exec rails db:migrate как часть шага postdeploy во многих из этих ответов.

Должно ли это быть на самом деле bundle exec rails db:migrate в разделе release app.json?