是否可以将Heroku插件从一个应用程序迁移到另一个应用程序?

时间:2019-08-14 16:00:55

标签: heroku heroku-cli

假设两个应用onetwo

$ heroku apps
=== {somebody's} Apps
one
two

现在假设有一个绑定到one的Postgres插件:

$ heroku addons -a one

Add-on                                  Plan       Price  State  
──────────────────────────────────────  ─────────  ─────  ───────
heroku-postgresql (postgresql-foo-123)  hobby-dev  free   created
 └─ as DATABASE

The table above shows add-ons and the attachments to the current app (one) or other apps.

是否可以使用CLI将此插件迁移到two

我知道您可以将其附加到two

$ heroku addons:attach -a two one::DATABASE
Attaching postgresql-foo-123 to ⬢ two... done
Setting DATABASE config vars and restarting ⬢ two... done, vXXX

但是之后,您无法将其与{em>“计费应用” 分开的one

$ heroku addons:detach -a one one::DATABASE
Detaching DATABASE to postgresql-foo-123 from ⬢ one... !
 ▸    Cannot destroy last attachment to billing app for resource postgresql-foo-123

当您查看附加到two的服务时,可以看到此状态(在“价格”下):

$ heroku addons -a two

Add-on                                  Plan       Price                State  
──────────────────────────────────────  ─────────  ───────────────────  ───────
heroku-postgresql (postgresql-foo-123)  hobby-dev  (billed to one app)  created
 ├─ as DATABASE
 └─ as DATABASE on one app

The table above shows add-ons and the attachments to the current app (two) or other apps.

如果我现在删除one,则该插件也会随之删除:

$ heroku apps:delete -a one -c one
Destroying ⬢ one (including all add-ons)... done

$ heroku addons -a two
No add-ons for app two.

那么,有什么办法可以更改该插件的计费应用?理想情况下,我想最后将插件仅 附加到two,以便可以删除one而不会丢失任何数据。

1 个答案:

答案 0 :(得分:1)

根据我从Heroku支持小组得到的答复,简短的答案是“ no” (强调我的意思):

  

您可以使用heroku addons:attach使附加组件可用于   其他应用程序,但附件的帐单将保留在   相同的应用

我们提出了两种解决方案:


如果您关心的只是最后一个名为 two的应用程序,该应用程序绑定到与one绑定的数据库,则可以切换名称:

heroku apps:delete -a two -c two
heroku apps:rename -a one two

希望没有人在删除和重命名之间的短暂间隔内使用two ...


或者,如果您希望将数据从one转移到two,则可以创建一个新的插件并在其中复制数据(这仅适用于支持此功能的插件,例如heroku-postgresql):

heroku addons:create heroku-postgresql:hobby-dev -a two
heroku pg:copy DATABASE two::DATABASE -a one --confirm one
heroku apps:delete -a one -c one  # also deletes the old database