运行 命令行的演变

Run Evolutions in Command Line

这是我修补 Play 框架的第一天,我在进化方面遇到了困难。我正在使用 Play 2.4。

我从 activator ui 中出现的许多应用程序中挑选了一个示例应用程序,它使用 play-slickplay-slick-evolutions 进行数据库连接和演化。

我已经仔细阅读了 the docs,但我似乎无法从命令行找到 运行 演变的方法。当我在 bash 上 运行 activator 时,我陷入了 shell,而 help 没有提出任何关于 运行ning 的进化, 或光滑。

我已经 PHP 有一段时间了,所以我已经习惯了能够从命令行 运行 这些 up/down。我可以从数据库客户端删除表并执行 activator run 这应该提示我 运行 演化,但我正在寻找正确的手动方法来执行此操作。我想这是可能的,因为它需要在部署时完成。

据我所知,它们并非设计为 运行 手动。在开发中,Play asks 你 运行 他们:

在生产环境中,我通过使用参数 -DapplyEvolutions.default=true 启动我的服务器来触发进化。您也可以将此(当然没有 -D)写入 application.conf 文件,以便始终 运行 他们。您也可以仅使用 -DapplyUpEvolutions.default=true-DapplyDownEvolutions.default=true.

的向下或向上演变

当然,您始终可以选择手动复制您需要的脚本部分,然后将其应用到您最喜欢的数据库工具中。但是,您随后需要通过手动更改 table play_evolutions 来告诉 Play 您做了什么。一个更简单的解决方案是根本不使用 Play Framework 提供的进化机制。

对我有用且不涉及启动游戏实例的快速技巧:

export PGPASSWORD=<password>
for SQL_FILE in $(ls <path-to-evolution-files>); do
    psql -h localhost -U <username> -c "$(sed '1,/Ups/d' <path-to-evolution-files>/$SQL_FILE | sed -n '/Downs/q;p')";
done

删除 Ups 之前的所有内容以及 Downs 之后的所有内容,并在 Postgres 实例上运行命令。