2007-06-07
Win32 service - Errno::EINVAL (Invalid argument)解决方法
关键字: Mongrel
Mongrel在windows 2003 服务器上以 service的方式运行时,经常会出现Errno::EINVAL (Invalid argument)类错误,一般在post数据的时候特别容易出现. 解决办法有以下几种.
1. 有个比较简单的解决办法,就是把start_form_tag改成form.这样的确很难再出现这个问题.
2. mongrel以console的方式来运行.
3. 重新定向stderr和stdout到某个指定的文件.
下面来说下,为什么会出现这个错误. 仔细观察下这些错误发生时的提示,比如有一个函数在里面 puts函数.
错误发生的更本原因也是这个函数.
这个函数在调用的时候,要拥到stderr,和stdout,但是这两个对象是pipe. 如果是控制台模式下,stderr,和stdout管道是一定存在,并且可以访问到的. 但是win32 services下面,是没有stderr和stdout的.所以调用puts函数必然出错.
各位可以试下,随便写个页面,里面放上puts函数,放到 win32,mongrel service模式下面去运行,就会出现Errno::EINVAL (Invalid argument)错误.
如果要根本上解决这个问题,最好的办法还是重定向 stderr,stdout. 可以在environment.rb中加入
STDOUT.reopen("c:\log\stdout.log") 日志路径随你们工程环境来修改. stderr的重定向代码也一样.就不多写了.
1. 有个比较简单的解决办法,就是把start_form_tag改成form.这样的确很难再出现这个问题.
2. mongrel以console的方式来运行.
3. 重新定向stderr和stdout到某个指定的文件.
下面来说下,为什么会出现这个错误. 仔细观察下这些错误发生时的提示,比如有一个函数在里面 puts函数.
错误发生的更本原因也是这个函数.
这个函数在调用的时候,要拥到stderr,和stdout,但是这两个对象是pipe. 如果是控制台模式下,stderr,和stdout管道是一定存在,并且可以访问到的. 但是win32 services下面,是没有stderr和stdout的.所以调用puts函数必然出错.
各位可以试下,随便写个页面,里面放上puts函数,放到 win32,mongrel service模式下面去运行,就会出现Errno::EINVAL (Invalid argument)错误.
如果要根本上解决这个问题,最好的办法还是重定向 stderr,stdout. 可以在environment.rb中加入
STDOUT.reopen("c:\log\stdout.log") 日志路径随你们工程环境来修改. stderr的重定向代码也一样.就不多写了.
- 14:52
- 浏览 (3384)
- 论坛浏览 (3599)
- 评论 (0)
- 相关推荐
发表评论
该博客是同时发布到论坛的,无法评论在论坛已被锁定的帖子
- 浏览: 311758 次
- 来自: 温州

- 详细资料
搜索本博客
我的相册
4
共 1 张
共 1 张
最新评论
-
如何在管理不规范的公司中 ...
我假装给老板打工,老板假装给我付工资.
-- by sword721 -
如何在管理不规范的公司中 ...
LS说的没错,让你成为能影响环境的人!
-- by hyhongyong -
如何在管理不规范的公司中 ...
jack 写道 论坛上常说的管理不够规范,管理混乱。就实 ...
-- by leton2008 -
如何在管理不规范的公司中 ...
LZ 讲的情况确实存在; 在一个公司待久了,和身边的人(管理者)熟了,情况就复杂 ...
-- by hszhl -
如何在管理不规范的公司中 ...
JavaJason 写道这就是一种企业文化,只是这种文化没有找到清晰的归宿 公 ...
-- by hyhongyong






评论排行榜