2

実行時にプラグイン内に構成を追加し、おそらく にも登録したいと思いますprojectConfigurations。そのような方法で状態を操作する可能性はありますか? これはコマンドで実行する必要があり、ソリューションは の奥深くに埋め込まれているとAttributeMap思いますが、その獣にアプローチする方法がわかりません。

def addConfiguration = Command.single( "add-configuration" )( ( state, configuration ) => {
    val extracted = Project extract state
    val c = configurations.apply( configuration )
    // Add c to the state ...
    ???
} )

バックグラウンド

私はsbt-slick-codegenプラグインに取り組んでおり、これは必須機能としてマルチデータベース サポートを備えています。sbt でデータベースを構成するために、私は非常に単純なアプローチを取りました。すべてを Map に詰め込みます。

databases in SlickCodegen ++= Map(
    "default" -> Database(
        Authentication(
            url = "jdbc:postgresql://localhost:5432/db",
            username = Some( "db_user_123" ),
            password = Some( "p@assw0rd" )
        ),
        Driver(
            jdbc = "org.postgresql.Driver",
            slick = slick.driver.PostgresDriver,
            user = Some( "com.example.MySlickProfile" )
        ),
        container = "Tables",
        generator = new SourceCodeGenerator( _ ),
        identifier = Some( "com.example" ),
        excludes = Seq( "play_evolutions" ),
        cache = true
    ),
     "user_db" -> Database( ... )
)

さて、これは機能しますが、 sbtの目的を無効にし、セットアップが難しく、保守と更新が困難です。代わりに、次のように構成することをお勧めします。

container in Database := "MyDefaultName",
url in Database( "backup" ) := "jdbc:postgresql://localhost:5432/database",
cache in Database( "default" ) := false

また、このアプローチは現在の開発ブランチDatabase( x )で機能していますが、コンパイル時に既知の構成のみであり、次の問題につながります。

その上で、 PlayFrameworkをサポートするモジュールを追加する予定です。アイデアは、TypesafeインスタンスSettingKey[Seq[Config]]( "configurations" )を受け入れ、それらから洗練された構成を読み取り、適切な構成を生成する設定を持つことです。しかし、このステップでは、私はアイデアがありません。 ConfigDatabase( x )

4

0 に答える 0