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.
Кто-нибудь пробовал это и знал, как он может быть автоматизирован?
Ответы
Ответ 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
?