Как перенести производственную базу данных на постановку на Heroku с помощью pgbackups? Получение ошибки
В Heroku, я пытаюсь скопировать производственную базу данных в мое промежуточное приложение, используя аддон pgbackups. Я выполнил инструкции на странице аддонов: https://devcenter.heroku.com/articles/pgbackups
Сначала я захватил БД:
heroku pgbackups:capture --app production-app
Это сработало:
HEROKU_POSTGRESQL_PURPLE (DATABASE_URL) ----backup---> b238
Capturing... done
Storing... done
Однако, когда я пытаюсь восстановить его в промежуточном приложении:
heroku pgbackups:restore DATABASE `heroku pgbackups:url --app production-app` --remote staging
Появляется следующее сообщение об ошибке:
DATABASE_URL does not match any of your databases
! Could not resolve database DATABASE
!
! Available databases:
Я также попробовал ввести полный URL-адрес:
heroku pgbackups:url b238 --app production-app
heroku pgbackups:restore DATABASE "https://s3.amazonaws.com/..." --remote staging
а также попытался называть приложение (вместо -remote staging):
heroku pgbackups:restore DATABASE `heroku pgbackups:url --app production-app` --app staging-app
Ничего из этого не получилось. Интересно отметить, что в сообщении об ошибке нет "Доступных баз данных". Я предполагаю, что это относится к промежуточному приложению, которое действительно пустое. Если я напечатаю:
heroku pgbackups
Я получаю:
! No backups. Capture one with `heroku pgbackups:capture`.
Чтобы найти доступные резервные копии (производство), мне нужно ввести:
heroku pgbackups --app production-app
и я получаю список текущих резервных копий. Я не знаю, нормально ли это или даже если это связано с проблемой, но я думал, что должен упомянуть об этом.
Я прочитал и пробовал каждый ответ здесь, но ничего не получилось. Любые идеи?
Ответы
Ответ 1
Обновление за середину 2017 года (кража от ответа Takehiro Mouri - упростить часть DATABSE_NAME)
Обновление для середины 2015 года...
Дополнение pgbackups устарело. Больше pgbackups:transfer
.
Чтобы скопировать базу данных с yourapp на yourapp_staging:
# turn off the web dynos in staging
heroku maintenance:on -a yourapp-staging
# if you have non-web-dynos, do them too
heroku ps:scale worker=0 -a yourapp-staging
# backup the staging database if you are paranoid like me (optional)
heroku pg:backups capture -a yourapp-staging
# execute the copy
heroku pg:copy your-app::DATABASE_URL DATABASE_URL -a yourapp-staging
Затем, когда он будет завершен, снова включите:
# this is if you have workers, change '1' to whatever
heroku ps:scale worker=1 -a yourapp-staging
heroku maintenance:off -a yourapp-staging
(источник: https://devcenter.heroku.com/articles/upgrading-heroku-postgres-databases#upgrade-with-pg-copy-default)
Ответ 2
UPDATE:
Вы можете запустить эту команду для переноса базы данных с производства на постановку:
heroku pg:copy your-app::DATABASE_URL DATABASE_URL -a yourapp-staging
Он предложит вам подтвердить действие, и как только вы это сделаете, все данные будут перенесены.
Ответ 3
UPDATE: это больше не работает. Пожалуйста, обратитесь к @lucas-nelson answer ниже.
Итак, теперь все проще. Проверьте команду передачи как часть pgbackups
heroku pgbackups:transfer HEROKU_POSTGRESQL_PINK sushi-staging::HEROKU_POSTGRESQL_OLIVE -a sushi
https://devcenter.heroku.com/articles/upgrade-heroku-postgres-with-pgbackups#transfering-databases-between-heroku-applications
Это прекрасно сработало для меня, взяв производственный код обратно на мой веб-сайт.
Ответ 4
Здесь простое и безопасное решение для этого, используя дополнения и разметку Heroku. Он не требует резервного копирования, отсутствия простоев и не перезаписывает какую-либо базу данных.
Вам нужно сначала подключить производственную базу данных к промежуточному приложению, а затем вилку в промежуточном приложении.. Если вы создаете производственное приложение, а затем присоединяетесь к промежуточному приложению, приложение для выставления счетов будет производственное приложение, и вы не сможете отсоединить от него вилку.
1. Сначала узнайте надвое имя своей производственной базы данных (здесь postgres-prod-123
):
$ heroku addons --app myapp-production
heroku-postgresql (postgresql-prod-123) standard-0 $50/month
└─ as DATABASE
2. Затем прикрепите добавление производственной базы к вашему промежуточному приложению. Дайте ему имя, как PRODUCTION_DB
, чтобы было легко распознать:
$ heroku addons:attach postgresql-prod-123 --app myapp-staging --as PRODUCTION_DB
3. Затем создайте вилку рабочей базы данных в промежуточном приложении:
$ heroku addons:create heroku-postgresql:standard-0 --fork PRODUCTION_DB_URL --as STAGING_DB --app myapp-staging
4. Наконец, продвиньте вилку в качестве основной базы данных вашего промежуточного приложения:
$ heroku pg:promote STAGING_DB --app myapp-staging
Готово! Ваше промежуточное приложение теперь использует копию вашей производственной базы данных. Обратите внимание, что ваша предыдущая промежуточная база данных все еще существует, вы можете ее уничтожить после того, как убедитесь, что все работает.
Чтобы очистить, отделите производственную базу данных от промежуточного приложения:
$ heroku addons:detach postgresql-prod-123 --app myapp-staging
Ответ 5
Это работает для меня:
heroku pg:copy you-app-production::DATABASE DATABASE -a you-app-staging
Ответ 6
Я боролся с той же проблемой. Согласно ответу на этот вопрос, проблема может быть вашей версией героя gem. Я только что обновил свою версию (с 2.26.2 до 2.26.6), и теперь она работает.
Ответ 7
Сначала создайте обновленную резервную копию продукции:
heroku pgbackups:capture -a productionappslug --expire
Узнайте, какой цвет Heroku назвал вашу базу данных.
https://postgres.heroku.com/databases
или
https://dashboard.heroku.com/apps/STAGINGAPPSLUG/resources
Затем загрузите резервную копию производственного db в стадию (изменение RED на любой цвет вашего):
heroku pgbackups:restore HEROKU_POSTGRESQL_RED -a stagingappslug `heroku pgbackups:url -a productionappslug`
stagingappslug и liveappslug - это те, которые называются вашими приложениями для вашего героя.
Ответ 8
Чтобы передать (скопировать) производственную базу данных (исходную базу данных) в промежуточную базу данных (целевую базу данных), вам необходимо вызвать pg:copy
из целевого приложения, ссылаясь на исходную базу данных.
heroku pg:copy source-application::OLIVE HEROKU_POSTGRESQL_PINK -a target-application
Другой пример:
heroku pg:copy my-production-app::HEROKU_POSTGRESQL_OLIVE HEROKU_POSTGRESQL_PINK --app my-staging-app
Чтобы получить названия цветов ваших баз данных, используйте:
heroku pg --app my-production-app
heroku pg --app my-staging-app
См. pg: copy
Ответ 9
Вы можете сделать это используя команду ниже
heroku pg:copy <production_app_name>::HEROKU_POSTGRESQL_BLACK_URL OLIVE -a <staging_app_name> --confirm <staging_app_name>
Ответ 10
После НЕТ УДАЧИ. (Я использую герою gem 2.31.4)
Я сделал следующее (помощь для утомленного)
-
Вход в консоль базы данных Heroku
-
Войдите в раздел > Настройки > PGRestore > Скопируйте 'Настройки подключения' в текстовый файл.
-
Войти в производство > Снимки, нажмите "+", чтобы создать новую резервную копию. Затем нажмите кнопку загрузки. Скачать
в папку apps/tmp или хотите, чтобы вы хотели.
-
Установите режим обслуживания в режим обслуживания
$heroku maintenance: on
-
Выполните команду, например, с текстом параметров подключения и дампом в конце: PGPASSWORD = {... бит материала здесь...} -p 5432 'tmp/b048.dump.dump'
-
После запуска:
$heroku maintenance: off
-
Войдите в систему и убедитесь, что все соответствует.
Найти недавнюю транзакцию, которую вы знаете, находится в производстве, если вы можете через нее.
Консоль запуска $heroku для обоих приложений и проверка идентификаторов.
Ответ 11
Я думаю, что его не - устранить его --app попробуйте это:
heroku pgbackups:restore DATABASE `heroku pgbackups:url --app production-app` --app staging-app
Ответ 12
Это то, что сработало для меня
- Загрузите резервную копию с консоли heroku и загрузите ее на s3.
-
heroku pg:backups restore 'DUMP_FILE_URL_FROM_S3' DATABASE --app MY_APP