例如,如果我有这个ruby脚本,stderr会继续G-WAN:
require 'time'
START_TIME = Time.now
ENV.each do |k,v|
puts "#{k} => #{v} <br/>"
end
RUNTIME = Time.now - START_TIME
puts "<br/>%.2f ms" % (RUNTIME*1000.0)
$stderr.puts "Test 123"
exit(200)
当该脚本请求时,Test 123
目录或控制台中没有logs/*
字符串。
答案 0 :(得分:1)
stderr在G-WAN上的位置?
如果我记得很清楚,stdin
,strerr
和stdout
在守护程序模式下关闭,因为无论如何都无法访问G-WAN从其父终端访问它们。
但在“互动”中#39;模式,其中G-WAN仍然显示控制台输出,如编译错误和&#39; gracefull&#39;崩溃报告(servlet崩溃没有崩溃服务器),这些文件描述符保持打开状态。
可以使用作为模块加载的脚本(C
,C++
,C#
,Java
,PH7
从任何G-WAN轻松检查,Objective-C
等,也就是说,当脚本共享G-WAN内存空间时。
但是当使用CGI进程而不是因为脚本运行时没有作为模块(Ruby
,Perl
等)加载时,这是不同的,因为G-WAN正在运行外部进程并且管道stdout
。
在后一种情况下,G-WAN需要另一个管道才能流stderr
。这没有完成,这就是为什么在从stderr
脚本将输出定向到Ruby
时没有看到任何内容的原因。
使用更多的管道将消耗更多的文件描述符,并且在服务器负载下会更快,因此,除非您对此功能的引人注目使用值得与我们共享,否则实现它可能没有多大意义。
最后,所有脚本语言都应该使用G-WAN内存空间中加载的模块,因为这样可以实现更高的性能和并发性。
因此,在G-WAN使用stderr
而Ruby
无需额外费用之前,这只是时间问题(以及Ruby社区的帮助)。