当尝试通过在Docker容器中运行的phoenix应用来尝试回滚数据库时,我无法弄清楚如何回滚数据库。我正在尝试在本地模拟在远程服务器上进行迁移时的状态。
我正在通过运行在本地运行:
docker run -it -p 4000:4000 -e DATABASE_URL=ecto://postgres:[email protected]/my_app_dev -e SECRET_KEY_BASE=blahblah my-app-tag:v1
我通过以下方式查看正在运行的容器:
docker ps
我扑向容器里
docker exec -it 8943918c8f4f /bin/bash
cd插入app/bin
cd bin
尝试回滚
./my_app rpc 'MyApp.Release.rollback(MyApp.Repo, "20191106071140")'
=> 08:43:45.516 [info] Already down
如果在应用程序中运行时确实可以正常工作,那么当我做其他事情时,它应该会崩溃。但事实并非如此。
如果我尝试评估
./my_app eval 'MyApp.Release.rollback(MyApp.Repo, "20191106071140")'
=>
08:46:22.033 [error] GenServer #PID<0.207.0> terminating
** (RuntimeError) connect raised KeyError exception: key :database not found. The exception details are hidden, as they may contain sensitive data such as database credentials. You may set :show_sensitive_data_on_connection_error to true when starting your connection if you wish to see all of the details
(elixir) lib/keyword.ex:393: Keyword.fetch!/2
(postgrex) lib/postgrex/protocol.ex:92: Postgrex.Protocol.connect/1
(db_connection) lib/db_connection/connection.ex:69: DBConnection.Connection.connect/2
(connection) lib/connection.ex:622: Connection.enter_connect/5
(stdlib) proc_lib.erl:249: :proc_lib.init_p_do_apply/3
Last message: nil
** (EXIT from #PID<0.163.0>) shutdown
[我试图确保我知道如何将应用程序部署到远程(Heroku,AWS),并在每次部署时使应用程序自动迁移,但还可以选择运行命令以一次回滚1个步骤。] >
我没有找到任何信息。上面的调试是在远程服务器上创建此迁移/回滚功能的第一步,但首先要在本地计算机上进行测试。
迁移/回滚代码直接来自https://hexdocs.pm/phoenix/releases.html#ecto-migrations-and-custom-commands
任何帮助/指导将不胜感激。
谢谢
当尝试通过在Docker容器中运行的phoenix应用来尝试回滚数据库时,我无法弄清楚如何回滚数据库。我试图在本地模拟在...
首先,rpc
调用应该成功。运行my_app rpc
之前,请确保您确实在问题up
这里有两个问题,感谢@ aleksei-matiushkin,我的工作正常。