Mongrel在windows2003服务器上以service的方式运行时,经常会出现Errno::EINVAL(360问答Invalidar取gument)类错误,一般在post数据的时候特别容易出现.解决办法有以下几种.
1.有个比较简单的点责衣缩专实力解决办法,就是把star范静件夫粮老跑慢单世t_form_tag改成form.这样的历确很难再出现这个问题.
2.mongrel以console的方式来运行.
3蒸脱号核娘重越氢愿.重新定向stderr和stdout到某个指定的文件.
下面来说下,为什么会出现这个错现配航季肉慢北守水电早误.仔细观察下这些错误发生时的提示,比如有一个函数在里面puts函数.
错误医药发生的更本原因也是这个函数.
这个函数在调用的时候,要拥到stderr,和stdout,但是这两个对象是pipe.如果是控制台模式下,stderr,和stdout管道是一定存在,并且可以叫书别访问到的.但是win32services下面,是没有stderr和个引stdout的.所以调用puts函数必然出错.
各位可以试下,随便写个页面,里面放上puts函数,放到win32,mongrelservice模式下面去运行,就会出现Er蛋课径继们黑整械评rno::EINVAL(Invalidargument)错误.
如果要根本上解决这个问题,最好的办法还是重定向stderr,stdout.可以在environment.rb中加入
STDOUT.reopen("c:\log\stdout.log倍")日志路径随你们工程环境来修改.stderr的重定向代码也一样.就不多写了.