2017-09-02 93 views
1

我试图关注this blogpost,它演示了ratpack中的阻塞处理程序,但是我无法使其工作。我正在为背景丢失方法异常。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: [[email protected]352d0] 
    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 

回答

1

什么是您使用的Gradle版本?请记住,这个例子已经快4年了,它使用了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-wrapper.properties文件使用摇篮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 

如果定义相同摇篮wrapp呃版本,并做到:

./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 
+0

rus答案工作。谢谢 – somename