#kotlin #ktor
#kotlin #ktor
Вопрос:
Я создал тестовое приложение с помощью ktor, и оно отлично работает на моем локальном хостинге, но когда я загружаю его в heroku и обрабатываю, оно показывает, что сборка прошла успешно, но когда я открываю ссылку, появляется сообщение об ошибке приложения .
- Это мой класс приложения :
fun main(args: Array<String>): Unit = io.ktor.server.netty.EngineMain.main(args)
@kotlin.jvm.JvmOverloads
fun Application.module(testing : Boolean = true) {
val port = System.getenv("PORT")?.toInt() ?: 23567
embeddedServer(Netty,port){
install(ContentNegotiation){
jackson {
enable(SerializationFeature.INDENT_OUTPUT)
}
}
routing {
get("/randomgames"){
var submodel = subModel("Active", Calendar.getInstance().time.toString())
var game1 = userCredentials("Los Angelos","California","https://cdn.pixabay.com/photo/2017/08/05/11/16/logo-2582748_1280.png","https://cdn.pixabay.com/photo/2017/08/05/11/16/logo-2582748_1280.png",submodel)
var game2 = userCredentials("Texas","Arizona","https://cdn.pixabay.com/photo/2017/08/05/11/16/logo-2582748_1280.png","https://cdn.pixabay.com/photo/2017/08/05/11/16/logo-2582748_1280.png",submodel)
var game3 = userCredentials("New York","Virginia","https://cdn.pixabay.com/photo/2017/08/05/11/16/logo-2582748_1280.png","https://cdn.pixabay.com/photo/2017/08/05/11/16/logo-2582748_1280.png",submodel)
var gamesList = arrayListOf<userCredentials>()
gamesList.add(game1)
gamesList.add(game2)
gamesList.add(game3)
var mainModel = MainModel(gamesList)
call.respond(mainModel)
}
}
}.start(wait = true)
}
- Это файл applicationconf
ktor {
deployment {
environment = development
port = ${PORT}
}
application {
modules = [ ktor.api.com.ApplicationKt.module ]
}
}
- Это мой Procfile :
web: build/install/kotlinserver/bin/kotlinserver
* Это мой gradle :
buildscript {
repositories {
jcenter()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
apply plugin: 'java'
apply plugin: 'kotlin'
apply plugin: 'application'
group 'ktor.api.com'
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8
mainClassName = "io.ktor.server.netty.EngineMain"
compileKotlin {
kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
kotlinOptions.jvmTarget = "1.8"
}
sourceSets {
main.kotlin.srcDirs = main.java.srcDirs = ['src']
test.kotlin.srcDirs = test.java.srcDirs = ['test']
main.resources.srcDirs = ['resources']
test.resources.srcDirs = ['testresources']
}
task stage {
dependsOn installDist
println "Running Stage"
}
repositories {
mavenLocal()
jcenter()
maven { url 'https://kotlin.bintray.com/ktor' }
maven { url 'https://kotlin.bintray.com/kotlin-js-wrappers' }
maven { url "https://plugins.gradle.org/m2/" }
maven {url 'https://jitpack.io'}
maven {url 'https://github.com/psiegman/mvn-repo/raw/master/releases'}
maven {url 'http://dl.bintray.com/kotlin/kotlinx.html'}
}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
implementation "io.ktor:ktor-server-netty:$ktor_version"
implementation "ch.qos.logback:logback-classic:$logback_version"
implementation "io.ktor:ktor-server-core:$ktor_version"
implementation "io.ktor:ktor-jackson:$ktor_version"
implementation "io.ktor:ktor-gson:$ktor_version"
implementation "io.ktor:ktor-auth:$ktor_version"
implementation "io.ktor:ktor-html-builder:$ktor_version"
implementation "org.jetbrains:kotlin-css-jvm:1.0.0-pre.31-kotlin-1.2.41"
implementation "io.ktor:ktor-client-core:$ktor_version"
implementation "io.ktor:ktor-client-core-jvm:$ktor_version"
implementation "io.ktor:ktor-client-apache:$ktor_version"
testImplementation "io.ktor:ktor-server-tests:$ktor_version"
}
- Это ошибка из моего cmd после подключения к моей учетной записи heroku и получения журналов
// it show this error related to procfile
bash: build/install/kotlinserver/bin/kotlinserver: No such file or directory
//and this is H10 error code
2020-09-19T12:38:18.476773 00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=aqueous-reaches-02639.herokuapp.com request_id=0dbb86c9-0bf1-4aac-acd6-0825c938b3ba fwd="41.200.180.139" dyno= connect= service= status=503 bytes= protocol=https
2020-09-19T12:38:19.256239 00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=aqueous-reaches-02639.herokuapp.com request_id=d8bf7249-4f8a-4423-889a-81baca206ba4 fwd="41.200.180.139" dyno= connect= service= status=503 bytes= protocol=https
PS: Способ, которым я развертываю свое приложение ktor, — это просто создать git и зафиксировать мои файлы, затем на веб-сайте heroku я создаю приложение, подключаюсь к своему github и развертываю приложение, любая помощь будет оценена, ребята, спасибо.
Комментарии:
1. если вы хотите развернуть приложение ktor на heroku .. пожалуйста, прочитайте этот блог medium о развертывании приложения ktor nameisjayant.medium.com /…
Ответ №1:
Я только что исправил ту же проблему
«kotlinserver» было неправильным именем, я проверил это, запустив gradlew stage в консоли и перейдя по пути, указанному в Procfile (build / install / …), правильное имя — это имя проекта (модуля), я думаю.
также хочу упомянуть несколько вещей
- сначала
${PORT}
вapplication.conf
файле будет получено системное значение env var, поэтому вам не нужно ничего делать сval port = System.getenv("PORT")?.toInt() ?: 23567
функцией вашего модуля приложения. Добавление 2 строк,application.conf
таких как следующиеport = 8080
port = ${?PORT}
, установит порт на 8080, а затем на ПОРТ SystemEnv, если он существует - во-вторых, просто хочу напомнить, не забудьте запустить
heroku ps:scale web=1
свое приложение (вы также можете указать приложение здесь, добавив (-a [app-name]) передweb=1