精华帖 (0) :: 良好帖 (5) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-12-05
我不知道,也没有兴趣钻研。不过你有兴趣的话,可以跟踪到Logger.rb源代码里面去寻找原因。
|
|
返回顶楼 | |
发表时间:2008-12-05
估计是日志的打开方式有关系吧,进程以独占方式打开日志文件之后就没有关闭,要等进程退出才关闭,所以只要服务器在运行就不能修改文件
|
|
返回顶楼 | |
发表时间:2008-12-05
nhyjq 写道 谢谢Robbin的指导,看来只能这样了,但为什么会出现这种情况呢?难道就简单解释为“rails不适合在windows上跑?”
我也考虑过vmware啊,但咱们还没有正版,呵呵,我主要是想尝个鲜,反正对于小应用,咱们企业对用什么语言开发没多少限制,只要没版权问题就好。 为什么不试试VirtualBox呢? |
|
返回顶楼 | |
发表时间:2008-12-06
为什么非要在windows上开发呢。
|
|
返回顶楼 | |
发表时间:2008-12-06
robbin 写道 写个简单的ruby脚本,每隔几分钟跑一次,直接请求mongrel,如果mongrel超时或者返回信息不正常,立刻重起mongrel。这就叫做Site Status Health Check。
找问题才是王道 |
|
返回顶楼 | |
发表时间:2008-12-06
Alizee 写道 为什么非要在windows上开发呢。
因为,因为我们买了windows的正版,呵呵 算了,没太多精力深究了,现在只能按robbin所说的,用cygwin搞定日志切换。毕竟对我来说,完成项目比研究源代码更重要 |
|
返回顶楼 | |
发表时间:2008-12-07
最后修改:2008-12-08
除非你传给Logger的是一个加锁的文件io,否则Logger默认情况下是以FILE::WRONLY模式打开log文件,在Windows下和Linux一样可以多进程共享写(多个进程可以同时打开并写入同一个log文件),因此问题应该不在Logger本身。
(我的平台是Windows XP Pro SP3, ruby 1.8.7 i386-mingw32) |
|
返回顶楼 | |
发表时间:2008-12-11
最后修改:2008-12-11
还有种选择可以使用apache + thin,同时还可以考虑使用cygwin版本的ruby
还有一条路就是JRuby! 我之前有一些Windows上跑Rails的经验 Windows下Apache+Mongrel 最好是Apache (1) -> Apache (2) -> n x Mongrel Rails并非线程安全(Rails 2.2暂时不谈了),Ruby的线程性能也不好,所以必须限制Mongrel接受的连接数为1。Linux下Apache运行在prefork模式下不存在限制连接数的问题是因为到每个上游服务器的最大连接数总是1。但是因为Windows下Apache的MMP只能是winnt,一个父进程,一个子进程,子进程中是处理请求的线程,情况就不一样 Apache (2) 专门做Mongrel Cluster的反向代理(这里可以取消大部分的模块和选项,甚至日志都可以不开),并且限制到每个Mongrel进行的链接数为1 Apache (1) 使用一些选项,保证只有动态请求传递到Apache (2),比如使用mod_rewrite 当时为了配置,我翻译了proxy_pass指令的一些文档 http://shiningray.cn/proxypass-directive-in-apache.html 关于proxypass的参数,也就是如何限制到mongrel的链接数为1,并设置合适的链接池,即smax max ttl之类的参数 当增加服务器的时候,将Apache (2) + Mongrel cluster看做一个整体部署在不同的服务器上,用Apache (1) 作为前端负载均衡反向代理切分流量。 |
|
返回顶楼 | |
发表时间:2008-12-11
不好意思我忘记一个事情,我写了一个脚本周期性重启Mongrel……
|
|
返回顶楼 | |
发表时间:2008-12-12
谢谢楼上的经验
我现在还好啦 Apache然后Balancer 2个Mongrel,现在每天才达到10k请求,至少1周没重起过任何东西了 |
|
返回顶楼 | |