Postgresql Heroku审查应用程序:将数据库复制到审查应用程序
尝试完全自动化Heroku的应用程序(测试版)。Heroku希望我们使用Postgresql Heroku审查应用程序:将数据库复制到审查应用程序,postgresql,heroku,heroku-toolbelt,heroku-postgres,Postgresql,Heroku,Heroku Toolbelt,Heroku Postgres,尝试完全自动化Heroku的应用程序(测试版)。Heroku希望我们使用db/seeds.rb来为最近启动的实例的db种子 此应用程序没有db/seeds.rb。我们希望设置一个脚本,从当前父级复制现有数据库(暂存),并将其用作正在审查的新应用程序的数据库 我可以手动执行以下操作: heroku pg:copy myapp::DATABASE\u URL DATABASE\u URL--app myapp-pr-1384--确认myapp-pr-1384 但我不知道如何将Heroku创建的应用程
db/seeds.rb
来为最近启动的实例的db种子
此应用程序没有db/seeds.rb
。我们希望设置一个脚本,从当前父级复制现有数据库(暂存),并将其用作正在审查的新应用程序的数据库
我可以手动执行以下操作:
heroku pg:copy myapp::DATABASE\u URL DATABASE\u URL--app myapp-pr-1384--确认myapp-pr-1384
但我不知道如何将Heroku创建的应用程序名输入到postdeploy脚本中
有人试过这个,知道如何实现自动化吗 我遇到了同样的问题,下面是我如何解决它的
STAGING\u DATABASE\u URL
。url格式为postgresql://username:password@主机:端口/db\u名称
app.json
文件中,确保复制该变量app.json
中设置一个新的数据库,该数据库将设置数据库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"
}
]
}
另一种方法是在review应用程序之间共享数据库。您可以在
app.json
文件中继承DATABASE\u URL
附言:这对于我这个小团队来说已经足够了,请记住,对于你的团队来说可能还不够。而且,我将生产和测试(或登台,或开发,不管你怎么称呼它)数据分开 或者: 另一个使用pg_restore的解决方案,多亏了
我在试着让它工作时遇到了一个又一个问题。这个postdeploy脚本终于对我起作用了:
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
?你有没有想过这个问题?我也在这条船上,没有幸尝试在命令中嵌入ENV['HEROKU_APP_NAME']。是的,我的联系人@HEROKU告诉我,应用程序目前不可能意识到自己,所以你不能将DB复制到你的应用程序名中,因为它不知道它。他们希望“几周内”能解决这个问题。当他们(如果我记得;-)期待解决这个问题时,我会发回这里。@Meltemi:这方面有什么更新吗?我刚刚使用了EpiphanyMachine的解决方案,它工作得非常好:。值得一提/绿色复选标记这对我来说从登台应用程序到审查应用程序都很有效,但是如果app.json用于部署到生产,这难道不存在使用登台转储覆盖生产数据的风险吗?@Jamie与Herokai聊过这一点。基本上,只有通过应用程序API自动设置应用程序时,才能使用app.json将其部署到生产环境中。我的产品应用程序是实时的,不会通过他们的API弹出,所以它不重要。希望我能帮助你!这是一个绝妙的解决方案!我联系了Heroku,看看是否有办法直接运行pg_restore。有,但它需要一个curl命令,所以您的解决方案比imho更好@Jamie说得很清楚,app.json只在review应用程序上运行,从不在管道上进一步运行(暂存或生产)。查看脚本日志,我会得到如下内容:ALTER SEQUENCE错误:关系“addresses”已经存在错误:角色“ckoeyocnvasjns”不存在错误:关系“addresses\u id\u seq”已经存在错误:角色“ckoeyocnvasjns“不存在
我遇到了@chrisewards遇到的类似问题。我已将pg_dump命令更改为pg_dump-Ox$STAGING_DATABASE_URL
,以删除所有者和所有特权,并解决了问题。您如何解释一个人在其分支中更改数据库的情况?对于在同一数据库上运行的其他应用程序来说,这不会破坏它吗?是的,它会。这就是为什么我明确表示这对于我的案例来说已经足够了,当时我的案例是一个只有两名开发人员的团队。因此,如果我们要做这样的事情,我们通常会让对方知道,如果是这样的话,我们会负责执行回滚或其他任何操作。你能提供一个关于如何执行此操作的代码片段吗?@RickS我不再有权访问此项目,但我确实记得我们是通过配置变量继承来完成此操作的。如果你有一个数据库URL或类似的东西,你可以指定它是从“主应用”继承的,这样它将共享数据库。你可以在这里看到代码+更多信息
pg_dump -cOx $STAGING_DATABASE_URL | psql $DATABASE_URL && bundle exec rails db:migrate