2017-12-01 7 views
0

Ktor 백엔드를 Heroku postgres db로 이동하려고합니다. 여기에 전체 응용 프로그램 코드 :Heroku 포스트 그레스 관계 "information_schema.session_state"가 존재하지 않습니다.

https://github.com/MarcinMoskala/KotlinAcademyApp/tree/master/backend

는 Heroku가 포스트 그레스로 이동하려면, 나는이 예제 프로젝트를 기반으로 :

https://github.com/orangy/ktor-heroku-start

나는 다음에 내 데이터베이스 구성을 변경 :

private val config = application.environment.config.config("database") 

private val poolSize = config.property("poolSize").getString().toInt() 

private val hikariConfig = HikariConfig().apply { 
    val url = System.getenv("JDBC_DATABASE_URL") ?: config.property("connection").getString() 
    application.log.info("DB url is $url") 
    jdbcUrl = url 
    maximumPoolSize = poolSize 
    validate() 
} 

private val dataSource = HikariDataSource(hikariConfig) 

private val connection: DatabaseConnection = H2Connection { dataSource.connection } 

private val dispatcher = newFixedThreadPoolContext(poolSize, "database-pool") 

init { 
    connection.transaction { 
     databaseSchema().create(listOf(NewsTable, FeedbackTable, TokensTable)) 
    } 
} 

그리고 postgressql 종속성을 추가했습니다 :

compile "org.postgresql:postgresql:9.4-1201-jdbc4" 

(10)는 로컬 아직도 내가 Heroku가 그것을 누르면 그때 결과 다음과 같은 한 SQLite는 데이터베이스를 생성되지만 : 당신은 위해 Postgress에 H2Connection을 사용할 수 없습니다

DEBUG com.zaxxer.hikari.HikariConfig - jdbc4ConnectionTest.............false 
DEBUG com.zaxxer.hikari.HikariConfig - jdbcUrl.........................jdbc:postgresql://ec7-77-77-777-77.compute-1.amazonaws.com:7777/7777777?user=aaaaaaaaaaaa&password=<masked>&sslmode=require 
DEBUG com.zaxxer.hikari.HikariConfig - leakDetectionThreshold..........0 
DEBUG com.zaxxer.hikari.HikariConfig - maximumPoolSize.................20 
DEBUG com.zaxxer.hikari.HikariConfig - maxLifetime.....................1800000 
DEBUG com.zaxxer.hikari.HikariConfig - metricRegistry..................none 
DEBUG com.zaxxer.hikari.HikariConfig - metricsTrackerFactory...........none 
DEBUG com.zaxxer.hikari.HikariConfig - minimumIdle.....................20 
DEBUG com.zaxxer.hikari.HikariConfig - password........................<masked> 
[main] DEBUG com.zaxxer.hikari.HikariConfig - poolName........................"HikariPool-1" 
DEBUG com.zaxxer.hikari.HikariConfig - registerMbeans..................false 
DEBUG com.zaxxer.hikari.HikariConfig - readOnly........................false 
DEBUG com.zaxxer.hikari.HikariConfig - scheduledExecutor...............none 
DEBUG com.zaxxer.hikari.HikariConfig - scheduledExecutorService........internal 
DEBUG com.zaxxer.hikari.HikariConfig - schema..........................none 
DEBUG com.zaxxer.hikari.HikariConfig - threadFactory...................internal 
DEBUG com.zaxxer.hikari.HikariConfig - transactionIsolation............default 
DEBUG com.zaxxer.hikari.HikariConfig - username........................none 
DEBUG com.zaxxer.hikari.HikariConfig - validationTimeout...............5000 
DEBUG com.zaxxer.hikari.HikariConfig - allowPoolSuspension.............false 
DEBUG com.zaxxer.hikari.HikariConfig - autoCommit......................true 
DEBUG com.zaxxer.hikari.HikariConfig - HikariPool-1 - configuration: 
DEBUG com.zaxxer.hikari.HikariConfig - connectionInitSql...............none 
DEBUG com.zaxxer.hikari.HikariConfig - catalog.........................none 
DEBUG com.zaxxer.hikari.HikariConfig - connectionTestQuery.............none 
DEBUG com.zaxxer.hikari.HikariConfig - connectionTimeout...............30000 
DEBUG com.zaxxer.hikari.HikariConfig - dataSource......................none 
DEBUG com.zaxxer.hikari.HikariConfig - dataSourceClassName.............none 
DEBUG com.zaxxer.hikari.HikariConfig - dataSourceJNDI..................none 
DEBUG com.zaxxer.hikari.HikariConfig - dataSourceProperties............{password=<masked>} 
DEBUG com.zaxxer.hikari.HikariConfig - driverClassName.................none 
DEBUG com.zaxxer.hikari.HikariConfig - healthCheckProperties...........{} 
DEBUG com.zaxxer.hikari.HikariConfig - healthCheckRegistry.............none 
DEBUG com.zaxxer.hikari.HikariConfig - idleTimeout.....................600000 
DEBUG com.zaxxer.hikari.HikariConfig - initializationFailFast..........true 
DEBUG com.zaxxer.hikari.HikariConfig - initializationFailTimeout.......1 
DEBUG com.zaxxer.hikari.HikariConfig - isolateInternalQueries..........false 
DEBUG com.zaxxer.hikari.HikariConfig - jdbc4ConnectionTest.............false 
DEBUG com.zaxxer.hikari.HikariConfig - jdbcUrl.........................jdbc:postgresql://ec2-23-21-155-53.compute-1.amazonaws.com:5432/d1bj65rb5gi9qt?user=ufwvhxlvfjopkm&password=<masked>&sslmode=require 
DEBUG com.zaxxer.hikari.HikariConfig - maxLifetime.....................1800000 
DEBUG com.zaxxer.hikari.HikariConfig - leakDetectionThreshold..........0 
DEBUG com.zaxxer.hikari.HikariConfig - maximumPoolSize.................20 
DEBUG com.zaxxer.hikari.HikariConfig - metricRegistry..................none 
DEBUG com.zaxxer.hikari.HikariConfig - metricsTrackerFactory...........none 
DEBUG com.zaxxer.hikari.HikariConfig - minimumIdle.....................20 
DEBUG com.zaxxer.hikari.HikariConfig - password........................<masked> 
DEBUG com.zaxxer.hikari.HikariConfig - poolName........................"HikariPool-1" 
DEBUG com.zaxxer.hikari.HikariConfig - readOnly........................false 
DEBUG com.zaxxer.hikari.HikariConfig - registerMbeans..................false 
DEBUG com.zaxxer.hikari.HikariConfig - scheduledExecutorService........internal 
DEBUG com.zaxxer.hikari.HikariConfig - scheduledExecutor...............none 
DEBUG com.zaxxer.hikari.HikariConfig - schema..........................none 
DEBUG com.zaxxer.hikari.HikariConfig - threadFactory...................internal 
DEBUG com.zaxxer.hikari.HikariConfig - transactionIsolation............default 
DEBUG com.zaxxer.hikari.HikariConfig - username........................none 
DEBUG com.zaxxer.hikari.HikariConfig - validationTimeout...............5000 
INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... 
Process exited with status 1 
2017-12-01 08:38:27.783 [main] INFO com.zaxxer.hikari.pool.PoolBase - HikariPool-1 - Driver does not support get/set network timeout for connections. (Method org.postgresql.jdbc4.Jdbc4Connection.getNetworkTimeout() is not yet implemented.) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
2017-12-01 08:38:27.832 [main] DEBUG com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection [email protected] 
2017-12-01 08:38:27.834 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. 
Exception in thread "main" java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at kotlin.reflect.jvm.internal.KCallableImpl.call(KCallableImpl.kt:107) 
    at kotlin.reflect.jvm.internal.FunctionCaller$Method.callMethod(FunctionCaller.kt:98) 
    at kotlin.reflect.jvm.internal.FunctionCaller$StaticMethod.call(FunctionCaller.kt:108) 
    at kotlin.reflect.jvm.internal.KCallableImpl.callDefaultMethod(KCallableImpl.kt:149) 
    at kotlin.reflect.jvm.internal.KCallableImpl.callBy(KCallableImpl.kt:111) 
    at io.ktor.server.engine.ApplicationEngineEnvironmentReloading.executeModuleFunction(ApplicationEngineEnvironmentReloading.kt:270) 
    at io.ktor.server.engine.ApplicationEngineEnvironmentReloading.instantiateAndConfigureApplication(ApplicationEngineEnvironmentReloading.kt:247) 
    at io.ktor.server.engine.ApplicationEngineEnvironmentReloading.callFunctionWithInjection(ApplicationEngineEnvironmentReloading.kt:314) 
    at io.ktor.server.engine.ApplicationEngineEnvironmentReloading.createApplication(ApplicationEngineEnvironmentReloading.kt:118) 
    at io.ktor.server.engine.ApplicationEngineEnvironmentReloading.start(ApplicationEngineEnvironmentReloading.kt:227) 
    at io.ktor.server.netty.NettyApplicationEngine.start(NettyApplicationEngine.kt:43) 
    at com.marcinmoskala.kotlinacademy.backend.ServerKt.main(Server.kt:8) 
    at io.ktor.server.netty.NettyApplicationEngine.start(NettyApplicationEngine.kt:15) 
    at io.ktor.server.engine.ApplicationEngine$DefaultImpls.start$default(ApplicationEngine.kt:29) 
Caused by: org.postgresql.util.PSQLException: ERROR: relation "information_schema.session_state" does not exist 
    Position: 15 
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:420) 
    at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2270) 
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:305) 
    at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeQuery(ProxyPreparedStatement.java:52) 
    at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1998) 
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255) 
    at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:570) 
    at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeQuery(HikariProxyPreparedStatement.java) 
    at org.jetbrains.squash.schema.DatabaseSchemaBase.createStatements(DatabaseSchemaBase.kt:23) 
    at org.jetbrains.squash.dialects.h2.H2DatabaseSchema.currentSchema(H2DatabaseSchema.kt:8) 
    at org.jetbrains.squash.drivers.JDBCDatabaseSchema.tables(JDBCDatabaseSchema.kt:12) 
    at com.marcinmoskala.kotlinacademy.backend.db.Database$1.invoke(Database.kt:25) 
    at com.marcinmoskala.kotlinacademy.backend.db.Database.<init>(Database.kt:46) 
    at org.jetbrains.squash.schema.DatabaseSchemaBase.create(DatabaseSchemaBase.kt:10) 
    at com.marcinmoskala.kotlinacademy.backend.MainKt.main(Main.kt:39) 
    at com.marcinmoskala.kotlinacademy.backend.db.Database$1.invoke(Database.kt:47) 
    at org.jetbrains.squash.connection.DatabaseConnectionKt.transaction(DatabaseConnection.kt:25) 
    ... 18 more 
State changed from starting to crashed 
+0

으로 대체하십시오. Kotlin slack channel에서 물어볼 수 있습니다. Ktor의 저자는 대개 그곳에 있으십시오. 아마도 그는 당신을 도울 수 있습니다. – dzrkot

답변

2

. 귀하의 Gradle 파일에 compile "org.jetbrains.squash:squash-postgres:$squash_version"을 추가하고 PgConnection