2017-01-05 3 views
0

私は、プレーとスケーラを使用して簡単な安らかなAPIを作成しようとしています。基本的なルートをいくつか作成し、jsonレスポンスを返信し、POSTで送信されたjsonを検証することができました。今、私はpostgresデータベースに永続性を追加したいところです。ここで、それは分解し始めています。再生エラー:インジェクタを作成できません

私はapplication.confにdb情報を追加して、テーブルを作成する進化を作り始めました。私はGETエンドポイントをヒットして進化を遂行しているかどうかを調べようと試みましたが、代わりにエラーが発生しました。ここでは、HTMLからのエラー出力は(私はエンドポイントをヒットする私のブラウザを使用していた)である:ここでは

CreationException: Unable to create injector, see the following errors: 

1) A binding to play.api.db.DBApi was already configured at play.api.db.DBModule.bindings(DBModule.scala:25): 
Binding(interface play.api.db.DBApi to ProviderConstructionTarget(class play.api.db.DBApiProvider)) (via modules: com.google.inject.util.Modules$OverrideModule -> play.api.inject.guice.GuiceableModuleConversions$$anon$1). 
    at play.api.db.slick.evolutions.EvolutionsModule.bindings(EvolutionsModule.scala:15): 
Binding(interface play.api.db.DBApi to ConstructionTarget(class play.api.db.slick.evolutions.internal.DBApiAdapter) in interface javax.inject.Singleton) (via modules: com.google.inject.util.Modules$OverrideModule -> play.api.inject.guice.GuiceableModuleConversions$$anon$1) 

com.google.inject.CreationException: Unable to create injector, see the following errors: 

com.google.inject.internal.Errors.throwCreationExceptionIfErrorsExist(Errors.java:466) 
    com.google.inject.internal.InternalInjectorCreator.initializeStatically(InternalInjectorCreator.java:155) 
    com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:107) 
    com.google.inject.Guice.createInjector(Guice.java:96) 
    com.google.inject.Guice.createInjector(Guice.java:84) 
play.api.inject.guice.GuiceBuilder.injector(GuiceInjectorBuilder.scala:181) 
    play.api.inject.guice.GuiceApplicationBuilder.build(GuiceApplicationBuilder.scala:123) 
    play.api.inject.guice.GuiceApplicationLoader.load(GuiceApplicationLoader.scala:21) 
    play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1$$anonfun$1$$anonfun$2.apply(DevServerStart.scala:168) 
    play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1$$anonfun$1$$anonfun$2.apply(DevServerStart.scala:164) 
    play.utils.Threads$.withContextClassLoader(Threads.scala:21) 
    play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(DevServerStart.scala:164) 
    play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(DevServerStart.scala:131) 
    scala.Option.map(Option.scala:146) 
    play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1.apply(DevServerStart.scala:131) 
    play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1.apply(DevServerStart.scala:129) 
    scala.util.Success.flatMap(Try.scala:231) 
    play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1.apply(DevServerStart.scala:129) 
    play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1.apply(DevServerStart.scala:121) 
    scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24) 
    scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24) 
    java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1423) 
    java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289) 
    java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:902) 
    java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1689) 
    java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1644) 
    java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157) 

は私のルートである(私は実際にはまだデータベースに接続しようとしておりませんのでご了承ください)。

このコントローラメソッドに接続
GET  /cities      controllers.CityController.index 

def index = Action { 
    Ok(Json.obj("status" ->"OK", "message" -> "You did the thing!")) 
    } 

そして、ここで私のapplication.confで、簡潔にするため削除コメント:

akka { 
} 

play.crypto.secret = "changeme" 

play.modules { 
} 

play.i18n { 
    langs = [ "en" ] 
} 

play.http { 
    session { 
    } 

    flash { 
    } 
} 

play.server.netty { 
} 

play.ws { 
    ssl { 
    } 
} 

play.cache { 
} 

play.filters { 
    cors { 
    } 

    csrf { 
    } 

    headers { 
    } 

    hosts { 
    } 
} 

play.evolutions { 
} 

play.db { 
    prototype { 
    } 
} 

db { 
    db.default.driver=org.postgresql.Driver 
    db.default.jdbcUrl="jdbc:postgresql://localhost:5432/transit_service" 
    db.default.username="redacted" 
    db.default.password="redacted" 
    db.default.logSql=true 
} 

私の進化は、conf/evolutions/default/1.sqlに収められたかなり簡単なcreate tableステートメントです。

このエラーがなぜ発生しているのか、どのように進化を実際に実行することができるのかについての洞察があります。

+0

この問題は[Play Slick FAQ](https://www.playframework.com/documentation/2.5.x/PlaySlickFAQ#A-binding-to-play.api.db.DBApi-was-readyready)に記載されています。設定されています)。データベースへのアクセスにSlickを使用している場合は、 'libraryDependencies'から' jdbc'エントリを削除してください。 –

+0

はあなたが投稿した情報から問題を理解できませんでした。あなたがまだ解決していない場合、私は比較したい場合、最小のPlay + Slickの例を持っています:https://github.com/pedrorijo91/play-slick3-steps – pedrorijo91

+0

Matthias Eckhart - それが問題を解決しました。ありがとう! –

答えて

0

Matthias Eckhartがコメントで指摘したように、build.sbtのlibraryDependenciesからjdbcエントリを削除することが問題の解決策でした。

関連する問題