Play应用程式中的规格/速度互动问题

我有一个问题我真的不能解释…在 https://github.com/betehess/play-scalatest项目中是孤立的.

当我运行测试时,sbt被卡住了一段时间,然后抛出这个异常:

> test
[error] Uncaught exception when running tests: java.net.ConnectException: Connection timed out
Exception in thread "Thread-1" java.net.socketException: Connection reset
    at java.net.socketInputStream.read(SocketInputStream.java:196)
    at java.net.socketInputStream.read(SocketInputStream.java:122)
    at java.net.socketInputStream.read(SocketInputStream.java:210)
    at java.io.ObjectInputStream$PeekInputStream.peek(ObjectInputStream.java:2293)
    at java.io.ObjectInputStream$BlockDataInputStream.readBlockHeader(ObjectInputStream.java:2473)
    at java.io.ObjectInputStream$BlockDataInputStream.refill(ObjectInputStream.java:2543)
    at java.io.ObjectInputStream$BlockDataInputStream.skipBlockData(ObjectInputStream.java:2445)
    at java.io.ObjectInputStream.skipCustomData(ObjectInputStream.java:1941)
    at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1620)
    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1517)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771)
    at java.io.ObjectInputStream.readobject0(ObjectInputStream.java:1350)
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1990)
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1915)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798)
    at java.io.ObjectInputStream.readobject0(ObjectInputStream.java:1350)
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1990)
    at java.io.ObjectInputStream.defaultReadobject(ObjectInputStream.java:500)
    at java.lang.Throwable.readobject(Throwable.java:914)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at java.io.ObjectStreamClass.invokeReadobject(ObjectStreamClass.java:1017)
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1893)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798)
    at java.io.ObjectInputStream.readobject0(ObjectInputStream.java:1350)
    at java.io.ObjectInputStream.readobject(ObjectInputStream.java:370)
    at sbt.React.react(ForkTests.scala:117)
    at sbt.ForkTests$$anonfun$mainTestTask$1$Acceptor$2$.run(ForkTests.scala:76)
    at java.lang.Thread.run(Thread.java:745)

看起来sbt被困在一个阻止呼叫与分叉的环境在https://github.com/sbt/sbt/blob/0.13.5/main/actions/src/main/scala/sbt/ForkTests.scala#L117.

一些言论:

>我运行Ubuntu 13.10和Java HotSpot(TM)64位“1.7.0_65”
>我的同事都不能在他们的机器上重现这个问题
>只有当scalatest在类路径上时,问题才会发生,即使不在这里使用
>如果我不使用PlayScala插件并将specs2显式添加为依赖关系,问题就会消失
>如果将scalatest依赖关系移动到主build.sbt中,则问题消失

解决方法

我终于找到了发生了什么事情.

事实证明,在正确的设置下,sbt将分支JVM执行测试,并希望与之进行通信.这样做是否符合测试框架.在最大的情况下,两个进程之间的通信将通过服务器进行. scalatest只是传达sbt必须使用的服务器地址和端口.这正在发生there.

val array = Array(InetAddress.getLocalHost.getHostAddress,skeleton.port.toString)

现在,去阅读javadoc对InetAddress#getLocalHost的说法:

Returns the address of the local host. This is achieved by retrieving
the name of the host from the system,then resolving that name into an
InetAddress.

我在Linux上我的本地主机(从来不是本地主机)最终被愚弄.现在,由于某种原因(我在家里搞砸我的网络),我的/ etc / hosts正在为dopey分配一个假的地址.所以,而不是像127.0.0.1这样的东西,scalatest会尝试在这个虚构的服务器上打开一个套接字.而由于where this is happening,在stacktrace中没有任何帮助.

我的猜测是,意图总是使用127.0.0.1 …

相关文章

共收录Twitter的14款开源软件,第1页Twitter的Emoji表情 Tw...
Java和Scala中关于==的区别Java:==比较两个变量本身的值,即...
本篇内容主要讲解“Scala怎么使用”,感兴趣的朋友不妨来看看...
这篇文章主要介绍“Scala是一种什么语言”,在日常操作中,相...
这篇文章主要介绍“Scala Trait怎么使用”,在日常操作中,相...
这篇文章主要介绍“Scala类型检查与模式匹配怎么使用”,在日...