为什么在开发过程中我会选择使用Unicorn或Thin而不是WEBrick?

41

我最近发现有些人喜欢在开发Rails应用程序时使用unicorn_rails而不是默认的WEBrick作为Web服务器。

我理解如果我想在生产环境中使用unicorn,尝试在开发环境中使用它可能会有点意义,但由于在生产环境中的配置不同,这是否相关呢?

相对于使用WEBrick来开发Rails应用程序,例如速度或一些额外功能,使用thinunicorn是否能带来任何真正的、实际的优势?还是仅仅是个人偏好的问题?


1
有趣的问题。在开发中,我放弃了WEBrick,因为在使用ruby 1.9.3的调试器时它经常崩溃。使用thin后,速度快得多。我一直认为WEBrick很原始,仅设计用于开发。我非常喜欢在开发中使用thin,并且独角兽在部署时给我1秒钟的停机时间。(我无法让独角兽与RubyMine调试器配合使用,但使用thin则没有这样的问题)。 - aceofspades
2
谢谢您没有提出另一个那种会被“关闭为不具建设性”的“最好的……是什么”的问题。这个问题对像SO这样的社区非常有帮助 :) - awendt
4个回答

18

尽可能接近生产环境进行开发非常重要。这有助于确保应用程序在部署到生产环境时能够按预期工作,而不是在运行时遇到错误。

使用复制生产环境的构建服务器进行持续测试可以缓解这个问题。即使您不是在完全相同的环境下进行开发,持续测试也可以确保应用程序以预期的方式运行。

就速度而言,在开发模式下运行Rails应用程序会影响性能,这会抵消各种Web服务器带来的任何好处。


5
除了其他回答已经给出了相当好的概述之外,还有一个技术原因,你可能要考虑使用独角兽而不是WEBrick:
WEBrick不支持子域名。支持HTTPS需要实现相当巧妙的方法
因此,如果你有一个使用子域名的SaaS应用程序,或者只想拥有admin/api/...子域名,那么WEBrick不是一个选择。对于Mac OS X,可以使用POW,但这对于Linux开发人员不起作用。

1
如果你使用的是Mac,+1提到POW会让生活变得更简单。 - JustinParker

3
我的个人经验是,在使用远程机器(Ubuntu,4核,8G内存,通过VPN-> SSH连接)作为开发环境时,独角兽比WEBrick快得多 - 我使用独角兽时看到不到1秒的页面加载时间,而WEBrick需要3到5秒甚至更长时间。我不确定为什么,可能与我的网络有关,但这是我个人所见。
我没有在开发中使用Thin,因为我读到它需要安装额外的gem以允许在开发模式下进行类重载(我无法个人验证其准确性)。此外,我更熟悉独角兽并在生产中使用它。

使用哪个 Gem 可以与 Unicorn 搭配实现类重载支持(当类发生变化时)。这就是我偏爱 Webrick 的唯一原因。 - Jay Godse
除非进行更多的研究,否则我无法命名一个宝石。但是,您可以使用观察器和正确配置的HUP信号。请参见:http://unicorn.bogomips.org/SIGNALS.html。正如我所说,我通常在开发中使用WEBrick来动态重新加载类。 - jmervine

1
我的个人经验是,在我的开发环境中,WEBrick 比 Unicorn 和 Thin(在 OS X 上)更快,用于一个相当大的 Rails 应用程序(有很多 gem、路由等)。但你应该自己测量,在你的机器上使用你的应用程序来测试(我使用 ab 和 Chrome 的开发者工具进行了测试)。
然而,在生产和开发中使用同一服务器是一个非常好的想法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接