这是我修改Play框架的第一天,我在进化方面遇到了困难。我正在使用Play 2.4。
我从activator ui
中出现的许多应用中选择了一个示例应用,它使用play-slick
和play-slick-evolutions
进行数据库连接和演变。
我已经仔细阅读the docs,但我似乎找不到从命令行运行演进的方法。当我在bash上运行activator
时,我会被扔进一个shell中,而help
并没有提出任何关于运行evolution或浮油的信息。
我已经做了一段时间的PHP,所以我习惯于能够从命令行上/下运行它们。我可以从数据库客户端删除表并执行activator run
这应该提示我运行演进,但我正在寻找正确的手动方式来执行此操作。我想这是可能的,因为它需要在部署时完成。
答案 0 :(得分:13)
据我所知,它们并非设计为手动运行。在开发中,您Play asks运行它们:
在制作中我通过使用参数-DapplyEvolutions.default=true
启动我的服务器来触发演变。你也可以写这个(当然没有-D
)到application.conf文件来运行它们。您也可以仅使用-DapplyUpEvolutions.default=true
或-DapplyDownEvolutions.default=true
的向下或向上演变。
当然,总是可以选择手动复制您需要的脚本部分,并将其应用于您喜欢的数据库工具。但是,您需要通过手动更改表play_evolutions
来告诉Play您的操作。一个更简单的解决方案就是不使用Play Framework提供的演进机制。
答案 1 :(得分:1)
快速破解对我有用,并不涉及提出游戏实例:
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实例上运行命令。