ratpack中的非阻塞处理程序代码无效

时间:2017-09-02 00:01:20

标签: gradle groovy ratpack

我正在尝试跟踪this blogpost,它演示了ratpack中的阻塞处理程序,但我无法让它工作。我正在为背景丢失方法异常。

我的build.gradle文件如下this GitHub directory

buildscript {
    repositories {
    maven { url "http://oss.jfrog.org/artifactory/repo" }
    jcenter()
  }
  dependencies {
    classpath 'io.ratpack:ratpack-gradle:0.9.4'
  }
}

apply plugin: "ratpack-groovy"
apply plugin: "idea"
apply plugin: "eclipse"

repositories {
  maven { url "http://oss.jfrog.org/artifactory/repo" }
  jcenter()
  maven { url "http://repo.springsource.org/repo" }
  maven { url "https://nexus.codehaus.org/content/repositories/snapshots/" }
}

dependencies {
  springloaded "org.springsource.loaded:springloaded:1.1.5.RELEASE"

  testCompile "org.spockframework:spock-core:0.7-groovy-2.0", {
      exclude module: "groovy-all"
  }
}

// The Groovy that rest-assured drags in via ratpack-groovy-test is toxic, prevent it from coming in
// This should be fixed upstream in Ratpack
configurations.testCompile.dependencies.find { it.name == "ratpack-groovy-test" }.exclude(group: "org.codehaus.groovy")

和处理程序代码如下。

import static ratpack.groovy.Groovy.ratpack

    ratpack {
        handlers {
            get("non-blocking") {
                background {
                    Thread.sleep(10000)
                }.then{
                    response.send()
                }
            }
        }
    }

我正在为背景丢失方法异常。

groovy.lang.MissingMethodException: No signature of method: nonBlocking.background() is applicable for argument types: (nonBlocking$_run_closure1$_closure2$_closure3$_closure4) values: [nonBlocking$_run_closure1$_closure2$_closure3$_closure4@497352d0]
    at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:58)
    at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:81)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:52)
    at 

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

您使用的Gradle版本是什么?请记住,此示例已有近4年的历史,它使用旧版本的工具,如Gradle。如果我使用例如Gradle 3.5-rc-2版本并执行

./gradlew test

它会因以下错误而失败:

FAILURE: Build failed with an exception.

* Where:
Build file '/home/wololock/workspace/idea/stackoverflow-answers/46009278/build.gradle' line: 11

* What went wrong:
A problem occurred evaluating root project '46009278'.
> Failed to apply plugin [id 'ratpack-groovy']
   > Could not find method groovy() for arguments [DefaultExternalModuleDependency{group='io.ratpack', name='ratpack-groovy', version='0.9.4', configuration='default'}] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

现在,如果我们看看在开发此示例时使用了Gradle版本,我们会发现它根据项目的gradle-wrapper.properties文件使用了Gradle 1.10

#Sun Jul 21 19:00:37 CDT 2013
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=http\://services.gradle.org/distributions/gradle-1.10-bin.zip

如果您定义相同的Gradle包装器版本并执行:

./gradlew test

./gradlew runFatJar

运行应用程序,应该可以工作:

10:39:44: Executing external task 'runFatJar'...
The groovy configuration has been deprecated and is scheduled to be removed in Gradle 2.0. Typically, usages of 'groovy' can simply be replaced with 'compile'. In some cases, it may be necessary to additionally configure the 'groovyClasspath' property of GroovyCompile and Groovydoc tasks.
:compileJava UP-TO-DATE
:compileGroovy UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:fatJar
wrz 02, 2017 10:39:48 AM ratpack.server.internal.NettyRatpackServer start
INFO: Ratpack started for http://localhost:5050
:runFatJar
Sat Sep 02 10:40:40 CEST 2017 - received blocking request
Sat Sep 02 10:40:50 CEST 2017 - replying blocking request
Sat Sep 02 10:40:50 CEST 2017 - received non-blocking request
Sat Sep 02 10:41:00 CEST 2017 - replying non-blocking request