Scala play的演变正在重复应用

Scala play的演变正在重复应用,scala,playframework,playframework-2.0,playframework-evolutions,Scala,Playframework,Playframework 2.0,Playframework Evolutions,我正在使用Scala play evolutions,并将其保存在application.conf中 evolutionplugin=enabled applyEvolutions.default=true applyDownEvolutions.default=true 我也在一次进化中使用了这个sql脚本 ALTER TABLE `User` ADD `Level` INT(10) NOT NULL DEFAULT '1', 然而,当我在PROD模式下启动Play2时,我总是会遇到这个错

我正在使用Scala play evolutions,并将其保存在application.conf中

evolutionplugin=enabled
applyEvolutions.default=true
applyDownEvolutions.default=true
我也在一次进化中使用了这个sql脚本

ALTER TABLE `User` ADD `Level` INT(10) NOT NULL DEFAULT '1',
然而,当我在PROD模式下启动Play2时,我总是会遇到这个错误

Duplicate column name 'Level' [ERROR:1060, SQLSTATE:42S21]
当我在启动应用程序play_evolutions行之前检查数据库时,对应脚本的状态为“applied”,但启动后,它会变为“applied_up”,看起来每次都在反复启动。我怎样才能只应用“新”的进化,而不是从一开始就应用每一个进化?现在它的痛苦在于,当我向表中添加新列时,我还需要使用“向下”脚本来首先删除该列,使用“向上”脚本来添加该列,但这会导致在生产数据库中删除该列上的所有数据。我是不是错过了一些关于进化的东西?(对我来说,“进化”应该只在上次结束时继续,而不是每次从头开始)


谢谢

我猜您可能已经更改了已应用的evolutions sql。因此,它可能会下降到已更改的步骤并自动向上应用。此外,进化步骤必须彼此完全相反。否则,您永远无法达到确切的数据库状态


在生产中,您应该禁用applyDownEvolutions.default=true。否则,正如您所说,您可能会丢失数据,我也这么认为,但我清理了整个数据库,使其没有表,启动了应用程序,停止了,然后再次启动,然后失败了,同样,当我检查对应演变的新散列和旧散列时,也是如此。所以,只需重新启动应用程序,就不会对文件进行任何更改,但会失败。