2016-12-30 12 views
1

デフォルトのevolutionsディレクトリの場所を変更する方法はありますか?私は、次の明らかにまれなユースケースを持っているので、私はこれを必要とする:Play 2.5.x:デフォルトのevolutionsディレクトリの場所を変更するにはどうすればよいですか?

  • のDev /製品版のために、私はユニットテストのために
  • defaultデータベースのPostgres
  • を使用し、私はH2インメモリ・データベースを使用する必要が
  • evolutions/default/1.sql (Postgresの& H2)ポータブル
  • evolutions/default/2.sqlは、私が1.sql2.sql
  • を実行するために進化を必要とするのDev /製品版では、非ポータブルPostgresのスクリプト
  • です私は1.sql

を実行するために進化を必要とするユニットテストで

  • application.confを使用する方法や、いくつかのsbt設定アラなどがあります

    javaOptions in Test += "-Dconfig.file=conf/application.test.conf" 
    

    testのデフォルトのディレクトリを変更することはできますか?

    私のOPは、私が言うことができる場合にのみ解決されます。 (理論的には動作しません!)

    javaOptions in Test += "-Devolutions.prefix=conf/testdatabase/"

    、その後持っている:

    conf/ 
        evolutions/default/1.sql 
             2.sql 
        testdatabase/evolutions/default/1.sql -> ../../../evolutions/default/1.sql 
    

    私は認識していないよ、この問題のために、他のソリューションと幸せになります...限りそれは動作します:)

  • 答えて

    4

    あなたのテスト構成ファイルでは、この行を追加してevolutionsのデフォルトアプリケーションをオフにします。

    # Evolutions should not be applied by default 
    play.evolutions.db.default.enabled = false 
    

    テストファイルに、Evolutionsが呼び出されたときに適用されるヘルパーメソッドを定義します。テストオーバーライドで次に

    import play.api.db.Database 
    import play.api.db.evolutions.{DatabaseEvolutions, EvolutionsReader, ThisClassLoaderEvolutionsReader} 
    
    def applyEvolutions(database: Database, 
             evolutionsToSkip: Seq[Int], 
             evolutionsReader: EvolutionsReader = ThisClassLoaderEvolutionsReader, 
             autocommit: Boolean = true, 
             schema: String = ""): Unit = { 
        val dbEvolutions = new DatabaseEvolutions(database, schema) 
        val evolutions = dbEvolutions.scripts(evolutionsReader).filterNot(s => evolutionsToSkip.contains(s.evolution.revision)) 
        dbEvolutions.evolve(evolutions, autocommit) 
        } 
    

    beforeAllafterAll方法:

    override def beforeAll(): Unit = { 
        applyEvolutions(database, Seq(2)) 
        } 
    
        override def afterAll(): Unit = { 
        Evolutions.cleanupEvolutions(database) 
        } 
    

    次のように、データベースにアクセスすることができます

    import play.api.db.{ DBApi, Database } 
    val databaseAPI = app.injector.instanceOf[DBApi] 
    val database = databaseAPI.database("default") 
    
    関連する問題