Heroku:为 Phoenix 重新初始化数据库
Heroku: reinitialize database for Phoenix
这主要是为了测试目的,但是我怎样才能在Heroku上达到mix ecto.reset
一样的效果。这样的命令导致 FATAL: permission denied for database "template1"
在 drop
阶段。但我想删除所有表并重置所有增量计数器等
据我所知,Heroku 不允许您 'drop' 数据库,但确实内置了可以让您重置数据库的命令。
如果你有 heroku 的 CLI 工具包,你应该能够运行这些命令:
heroku pg:reset DATABASE_NAME
那你可以运行
heroku run mix ecto.migrate
这应该会重置您所有的计数器以及您之后的所有其他内容。
有关详细信息,请查看 Heroku 网站上的 link here
完整步骤:
heroku pg:info // get db_name from add-on field.
heroku pg:reset DB_NAME
heroku run MIX_ENV=prod mix ecto.migrate
heroku run MIX_ENV=prod mix run priv/repo/seeds.exs
最后,您可以使用 heroku restart
重新启动测功机
heroku run mix ecto.migrate
仅当您直接在 dyno 上 运行ning Elixir 时才有效(例如,使用 Elixir buildpack)。如果您 运行 将 Elixir 应用程序放在容器中(就像我一样),它将无法工作。
heroku pg:push
会将本地数据库复制到您的 Heroku Postgres 实例。您可以像这样重置开发数据库和 Heroku 数据库:
mix ecto.reset
heroku pg:reset DATABASE_URL
heroku pg:push my_app_dev DATABASE_URL -a my_app
注:
heroku pg:push
需要一个空数据库,因此您需要事先 运行 heroku pg:reset
。在原始问题中描述的场景中,这是预期的效果,但如果您不想先清空数据库,这将(不一定)对您有用。
有相应的heroku pg:pull
命令将数据库向相反方向移动。如果您需要对数据库进行大的更改,无法完全重置它,但是 可以 容忍一点停机时间,您可以从 Heroku 中提取数据库,使您的变化,并将其推回。在尝试此操作之前,请确保您知道自己在做什么。
heroku pg:push
和 heroku pg:pull
记录在 https://devcenter.heroku.com/articles/heroku-postgresql#pg-push-and-pg-pull。
这主要是为了测试目的,但是我怎样才能在Heroku上达到mix ecto.reset
一样的效果。这样的命令导致 FATAL: permission denied for database "template1"
在 drop
阶段。但我想删除所有表并重置所有增量计数器等
据我所知,Heroku 不允许您 'drop' 数据库,但确实内置了可以让您重置数据库的命令。
如果你有 heroku 的 CLI 工具包,你应该能够运行这些命令:
heroku pg:reset DATABASE_NAME
那你可以运行
heroku run mix ecto.migrate
这应该会重置您所有的计数器以及您之后的所有其他内容。
有关详细信息,请查看 Heroku 网站上的 link here
完整步骤:
heroku pg:info // get db_name from add-on field.
heroku pg:reset DB_NAME
heroku run MIX_ENV=prod mix ecto.migrate
heroku run MIX_ENV=prod mix run priv/repo/seeds.exs
最后,您可以使用 heroku restart
heroku run mix ecto.migrate
仅当您直接在 dyno 上 运行ning Elixir 时才有效(例如,使用 Elixir buildpack)。如果您 运行 将 Elixir 应用程序放在容器中(就像我一样),它将无法工作。
heroku pg:push
会将本地数据库复制到您的 Heroku Postgres 实例。您可以像这样重置开发数据库和 Heroku 数据库:
mix ecto.reset
heroku pg:reset DATABASE_URL
heroku pg:push my_app_dev DATABASE_URL -a my_app
注:
heroku pg:push
需要一个空数据库,因此您需要事先 运行heroku pg:reset
。在原始问题中描述的场景中,这是预期的效果,但如果您不想先清空数据库,这将(不一定)对您有用。有相应的
heroku pg:pull
命令将数据库向相反方向移动。如果您需要对数据库进行大的更改,无法完全重置它,但是 可以 容忍一点停机时间,您可以从 Heroku 中提取数据库,使您的变化,并将其推回。在尝试此操作之前,请确保您知道自己在做什么。
heroku pg:push
和 heroku pg:pull
记录在 https://devcenter.heroku.com/articles/heroku-postgresql#pg-push-and-pg-pull。