Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql Heroku审查应用程序:将数据库复制到审查应用程序_Postgresql_Heroku_Heroku Toolbelt_Heroku Postgres - Fatal编程技术网

Postgresql 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创建的应用程

尝试完全自动化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创建的应用程序名输入到postdeploy脚本中


有人试过这个,知道如何实现自动化吗

我遇到了同样的问题,下面是我如何解决它的

  • 在管道的基础应用程序上,将要从中复制的数据库url设置为环境变量。在我的例子中,这是
    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