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

Как перенести производственную базу данных на постановку на 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

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

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

4b9b3361

Ответ 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