从scala控制台内运行数据库演变

时间:2013-07-15 11:26:13

标签: scala playframework

我已经从scala控制台中启动了我的应用程序:

scala> import play.core.StaticApplication
scala> new StaticApplication(new java.io.File("."))

我收到警告,默认数据库需要进化。如何在scala控制台中运行这些演变?

3 个答案:

答案 0 :(得分:7)

在控制台中运行此操作,假设为"default"

play.api.db.evolutions.OfflineEvolutions.applyScript(new java.io.File("."), this.getClass.getClassLoader, "default")

或者,当开始播放!时,您可以自动应用演变:

play -DapplyEvolutions.default=true

...或将以上参数添加到您的配置中。

答案 1 :(得分:3)

我不确定Play @mushroom当时使用的是哪个版本(最常见的是Play 2.2),但事情发生了一些变化。通过在控制台中执行以下操作,我能够获得与@opyate相同的结果:

import play.api._
import play.api.db._
import play.api.db.evolutions._

// Start the application (instead of using `new play.core.StaticApplication(...)`)
val env = Environment(new java.io.File("."), this.getClass.getClassLoader, Mode.Dev)
val context = ApplicationLoader.createContext(env)
val loader = ApplicationLoader(context)
implicit val app = loader.load(context)

// Apply the evolutions
OfflineEvolutions.applyScript(
    new java.io.File("."),
    this.getClass.getClassLoader,
    app.injector.instanceOf[DBApi],
    "default",
    true
)

这是2.4.x source2.5.x source。请注意,对于2.5.x,OfflineEvolutions.applyScript需要额外的dbName和(可选)schema参数。

作为旁注,无法使用new play.core.StaticApplication(...)的原因已经回复here

答案 2 :(得分:2)

我认为最快的方法是:

play -DapplyEvolutions.default=true run

但你可以添加

applyEvolutions.default=true

到您的application.conf