我正在尝试使用Netbeans 7.0进行rails开发,并且正在使用最新的ruby插件。为了记录,我将默认的1.8.7解释器切换为指向本地1.9.2 ruby安装,但这个问题似乎发生在两个解释器上。
当ruby在我的代码中遇到错误时,错误输出会显示在我的控制台输出中的随机点。我原以为它会在遇到错误时打印错误,但看起来错误流和正常输出流正在不同的线程上更新。只是举个例子......用这段代码:
(0..10).each { |o| puts "Normal output" }
invalidSytax!
我在第二行触发语法错误,但错误输出可能会有所不同。例如:
Normal output
Normal output
Normal output
~/LearnRuby/lib/ch1_ex2.rb:41:in `<main>': undefined method `invalidSytax!' for main:Object (NoMethodError)
Normal output
Normal output
Normal output
Normal output
Normal output
Normal output
Normal output
Normal output
和...
~/LearnRuby/lib/ch1_ex2.rb:41:in `<main>': undefined method `invalidSytax!' for main:Object (NoMethodError)
Normal output
Normal output
Normal output
Normal output
Normal output
Normal output
Normal output
Normal output
Normal output
Normal output
Normal output
知道可能导致这种情况的原因是什么?我可以看到它在一个更大的项目中是一个大问题,当我可能认为我的代码没有问题但是在我的控制台流的开头真的输出了一条错误消息。
答案 0 :(得分:0)
这是因为NetBeans内部处理STDOUT和STDERR,输出不确定,我想它们都是在你已经怀疑的两个独立线程中处理的。所以你很有可能见证这里的竞争状况。
但这种情况与使用Ruby无关 - 例如当我为我的Java项目运行JUnit测试时,同样的情况发生,STDERR和STDOUT输出不确定地混合。
为什么你认为这是一个问题?只要输出不会混淆到乱码(如果两个线程同时尝试写入NetBeans的控制台并且没有适当的锁定机制就会发生这种情况)我不明白为什么这会很重要。
对于Web应用程序的日志文件,可以观察到相同的原则。如果许多客户端连接尝试同时将其信息记录到文件中,您将无法预测消息的显示顺序 - 我认为这种行为是多线程应用程序所固有的。