试图为应用程序完全自动化Heroku的Review Apps(beta)。 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脚本中。
有人试过这个,知道它是如何实现自动化的吗?
我遇到了同样的问题,这就是我如何解决它。
STAGING_DATABASE_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"
}
]
}
另一种方法是在审核应用之间共享数据库。您可以在DATABASE_URL
文件中继承app.json
。
PS:这对我的情况来说足够了,这是一个小团队,请记住,对你来说可能还不够。并且,我保持我的生产和测试(或暂存,或开发,无论你怎么称呼)数据分开。
或者:使用pg_sore的另一个解决方案,感谢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"
}
}
我试图让这个问题解决后遇到问题。这个postdeploy脚本终于为我工作了:
pg_dump -cOx $STAGING_DATABASE_URL | psql $DATABASE_URL && bundle exec rails db:migrate