Heroku Review Apps:复制数据库到评论应用程序
Heroku Review Apps: copy DB to review app
尝试完全自动化应用程序的 Heroku Review Apps(测试版)。 Heroku 希望我们使用 db/seeds.rb
为最近启动的实例的数据库播种。
我们没有 db/seeds.rb
这个应用程序。我们想设置一个脚本来从当前父级(暂存)复制现有数据库,并将其用作正在审查的新应用程序的数据库。
这个我可以手动完成:
heroku pg:copy myapp::DATABASE_URL DATABASE_URL --app myapp-pr-1384 --confirm myapp-pr-1384
但我不知道如何将 Heroku 创建的应用程序名称获取到 postdeploy 脚本中。
有人试过这个并且知道如何实现自动化吗?
我 运行 遇到了同样的问题,这是我解决它的方法。
设置要从中复制的数据库 url 作为管道基础应用程序上的环境变量。在我的例子中,这是 STAGING_DATABASE_URL
。 url格式为postgresql://username:password@host:port/db_name
.
在您的 app.json
文件中,确保复制该变量。
在您的 app.json
中提供一个新数据库,它将设置 DATABASE_URL
环境变量。
使用以下脚本复制数据库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"
}
]
}
另一种方法是在评论应用程序之间共享数据库。您可以在 app.json
文件中继承 DATABASE_URL
。
PS:这对于我的小团队来说已经足够了,请记住这对你的来说可能还不够。而且,我将生产和测试(或暂存或开发,无论你怎么称呼)数据分开。
或者:
另一个使用 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"
}
}
我 运行 遇到一个又一个问题试图让它工作。这个部署后脚本终于对我有用了:
pg_dump -cOx $STAGING_DATABASE_URL | psql $DATABASE_URL && bundle exec rails db:migrate
我将 && bundle exec rails db:migrate
视为许多此类回复中 postdeploy
步骤的一部分。
app.json
的 release
部分实际上应该是 bundle exec rails db:migrate
吗?
尝试完全自动化应用程序的 Heroku Review Apps(测试版)。 Heroku 希望我们使用 db/seeds.rb
为最近启动的实例的数据库播种。
我们没有 db/seeds.rb
这个应用程序。我们想设置一个脚本来从当前父级(暂存)复制现有数据库,并将其用作正在审查的新应用程序的数据库。
这个我可以手动完成:
heroku pg:copy myapp::DATABASE_URL DATABASE_URL --app myapp-pr-1384 --confirm myapp-pr-1384
但我不知道如何将 Heroku 创建的应用程序名称获取到 postdeploy 脚本中。
有人试过这个并且知道如何实现自动化吗?
我 运行 遇到了同样的问题,这是我解决它的方法。
设置要从中复制的数据库 url 作为管道基础应用程序上的环境变量。在我的例子中,这是
STAGING_DATABASE_URL
。 url格式为postgresql://username:password@host:port/db_name
.在您的
app.json
文件中,确保复制该变量。在您的
app.json
中提供一个新数据库,它将设置DATABASE_URL
环境变量。使用以下脚本复制数据库
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"
}
]
}
另一种方法是在评论应用程序之间共享数据库。您可以在 app.json
文件中继承 DATABASE_URL
。
PS:这对于我的小团队来说已经足够了,请记住这对你的来说可能还不够。而且,我将生产和测试(或暂存或开发,无论你怎么称呼)数据分开。
或者: 另一个使用 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"
}
}
我 运行 遇到一个又一个问题试图让它工作。这个部署后脚本终于对我有用了:
pg_dump -cOx $STAGING_DATABASE_URL | psql $DATABASE_URL && bundle exec rails db:migrate
我将 && bundle exec rails db:migrate
视为许多此类回复中 postdeploy
步骤的一部分。
app.json
的 release
部分实际上应该是 bundle exec rails db:migrate
吗?