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

Быстрее переносить db из одного приложения heroku в другое

Есть ли более быстрый способ переноса моей производственной базы данных в тестовое приложение?

В настоящее время я делаю heroku db:pull на моей локальной машине, затем heroku db:push --app testapp, но это становится трудоемким. У меня есть некоторые данные о семенах, но это не так точно, как просто тестирование с моими реальными данными. И поскольку они оба хранятся на соседнем облаке AWS, должен быть более быстрый способ перемещения данных?

Я думал об использовании пакета heroku, но заметил, что команда animate отсутствует?

bundles:animate <bundle>     # animate a bundle into a new app 
4b9b3361

Ответ 1

Это довольно распространено для миграции баз данных между промежуточными, тестовыми и производственными средами для Rails Apps. И heroku db:pull/push мучительно медленный. Лучший способ, который я нашел до сих пор, заключается в использовании дополнения Heroku PG Backups и бесплатно. Я выполнил следующие шаги для переноса производственная база данных для промежуточного сервера:

1) Создайте резервную копию для производственного приложения db

heroku pg:backups capture --app production-app

Это приведет к созданию файла резервной копии b001 из основной базы данных (обычно производят db в database.yml)

2) Чтобы просмотреть все резервные копии (ДОПОЛНИТЕЛЬНЫЕ)

heroku pg:backups --app production-app

3) Теперь используйте команду pg: backups restore, чтобы заполнить базу промежуточного сервера из последнего файла резервной копии на рабочем сервере

heroku pg:backups restore $(heroku pg:backups public-url --app production-app) DATABASE_URL --app staging-app

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

Ответ 2

Итак, теперь все проще. Проверьте команду передачи как часть pgbackups

heroku pgbackups:transfer HEROKU_POSTGRESQL_PINK sushi-staging::HEROKU_POSTGRESQL_OLIVE -a sushi

https://devcenter.heroku.com/articles/upgrading-heroku-postgres-databases#4b-alternative-transfer-data-between-applications

Это прекрасно сработало для меня, взяв производственный код обратно на мой веб-сайт.

Ответ 3

Правильный ответ снова изменился по состоянию на 11 марта 2015 года.

heroku pg:backups restore $(heroku pg:backups public-url --app myapp-production) DATABASE_URL --app myapp-staging

Обратите внимание, что теперь аргумент public-url.

https://blog.heroku.com/archives/2015/3/11/pgbackups-levels-up

Ответ 4

Обновление для середины 2015 года...

Дополнение pgbackups устарело. Больше pgbackups:transfer. pg:copy идеально подходит для этого сценария.

Чтобы скопировать базу данных из yourapp (пример db name: HEROKU_POSTGRESQL_PINK_URL в yourapp_staging (пример db name: HEROKU_POSTGRESQL_WHITE_URL)

# 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 to splat over the top of the staging database
heroku pg:copy yourapp::HEROKU_POSTGRESQL_PINK_URL HEROKU_POSTGRESQL_WHITE_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

Напоминание: вы можете использовать heroku pg:info -a yourapp-staging (и yourapp) для получения констант базы данных.

(источник: https://devcenter.heroku.com/articles/upgrading-heroku-postgres-databases#upgrade-with-pg-copy-default)

Ответ 5

psql -h test_host -c 'drop database test_db_name; create database test_db_name;'

pg_dump -h production_host production_db_name | psql -h test_host test_db_name`

Это можно сделать на production_host или на test_host — будет работать в обоих направлениях.

Ответ 6

Не проверял это, но он может работать.

Сделайте это, чтобы получить URL-адрес исходной базы данных:

heroku console "ENV['DATABASE_URL']" --app mysourceapp

Затем попробуйте выполнить db:push с этим.

heroku db:push database_url_from_before --app mytargetapp

Это может не сработать, если Heroku не разрешает доступ к машинам БД из-за пределов их сети, что, вероятно, так. Вы могли бы, возможно, попробовать использовать краны (драгоценные камни, которые используют команды героя db внутри) из вашего кода приложения где-нибудь (может быть, задача рейка). Это будет даже быстрее, чем вышеупомянутый подход, потому что все остается полностью в пределах AWS.

Edit:

Здесь (по общему признанию, хакерский) способ сделать то, что я описал выше:

Возьмите URL-адрес базы данных, как в первом фрагменте кода выше. Затем из задачи rake (вы можете сделать это на консоли, но вы рискуете запустить 30-секундный тайм-аут на консольных командах), выполните команду оболочки для кранов (нелегко определить, можно ли использовать краны непосредственно из Ruby; docs показывают использование CLI):

`taps pull database_url_from_source_app #{ENV['DATABASE_URL']}`

Обратные шаги важны; это как Ruby обозначает команду оболочки, в которой есть краны. Надеемся, что команда кранов доступна из приложения. Это позволяет избежать проблемы доступа к машине базы данных извне Heroku, поскольку вы используете эту команду из своего приложения.

Ответ 7

Heroku позволяет вам вилку существующих приложений на производстве. Используйте вилку heroku для копирования существующего приложения, включая надстройки, конфигурационные вары и данные Heroku Postgres.

Следуйте инструкциям на Heroku: https://devcenter.heroku.com/articles/fork-app

Ответ 8

Обновление для середины 2016 года...

При создании вилок у Heroku теперь есть флаг --fast, однако они будут устаревать до 30 часов.

$ heroku addons:create heroku-postgresql:standard-4 --fork HEROKU_POSTGRESQL_CHARCOAL --fast --app sushi

https://devcenter.heroku.com/articles/heroku-postgres-fork#fork-fast-option