Ruby on rails Webrick作为生产服务器与Thin或Unicorn?
似乎大家都认为不能将Webrick用作生产服务器是理所当然的,但我真的找不到任何地方提到原因。共识似乎是: “Webrick适合开发,但Thin或Unicorn是生产的选择,请注意。” 我确实查阅了Thin server的主页,其中谈到了每秒请求数,但我并不真正理解该图,因为没有注释 有人能告诉我为什么我应该使用瘦或独角兽相比Webrick吗?使用Webrick进行开发有什么好处吗?自从Webrick与rails一起出现以来,我一直在使用它,我认为这应该是默认的原因Ruby on rails Webrick作为生产服务器与Thin或Unicorn?,ruby-on-rails,production-environment,thin,webrick,unicorn,Ruby On Rails,Production Environment,Thin,Webrick,Unicorn,似乎大家都认为不能将Webrick用作生产服务器是理所当然的,但我真的找不到任何地方提到原因。共识似乎是: “Webrick适合开发,但Thin或Unicorn是生产的选择,请注意。” 我确实查阅了Thin server的主页,其中谈到了每秒请求数,但我并不真正理解该图,因为没有注释 有人能告诉我为什么我应该使用瘦或独角兽相比Webrick吗?使用Webrick进行开发有什么好处吗?自从Webrick与rails一起出现以来,我一直在使用它,我认为这应该是默认的原因 顺便说一句,我正在使用Her
顺便说一句,我正在使用Heroku。有几个重要的原因
*例如,如果您在负载平衡器后面运行,则可以将所有重写流量路由到未安装ruby的服务器,并让主服务器仅管理主流量。这种重写流量可能是由于SEO的站点更改或类似的原因。另一种情况是,一个站点有多个组件,可能一个部分是Rails,另一个部分是PHP,这两个部分都需要重写(即,将旧的PHP路径重写到Rails)它在过去有一些安全问题,但似乎最大的原因是,与用于生产的服务器相比,它的速度非常慢 我真的不喜欢把简单的事情复杂化和过早的优化。WEBrick可用于制作,前提是它是一个流量相当低的网站。大多数应用程序都是
如果您的网站做了一些需要时间的事情,例如发送电子邮件或生成PDF文件。您希望一次处理多个请求。WEBrick也无法处理更长的URI,如果它们超过2083个字符,您将看到崩溃。Thin没有这些问题,这使它更优越-已经在开发中。webrick在生产模式下运行时的最大缺点是它是单线程、单进程web服务器,这意味着它一次只能处理一个http请求。无论您使用哪台服务器,都可以使用delayed_作业来处理Heroku上的多个工作人员吗?是的,delayed_作业与Webrick无关,除非您的作业使用Webrick API(这实际上是一种代码气味).我指的是Ruby堆栈之外的重定向。就像mod_重写样式重定向一样。从技术上讲,您可以在Rack、Rails甚至Webrick(我可能错了)内部重定向,但这需要启动ruby,而ruby与Apache或Linux相比速度相对较慢Nginx@JimDeville-Unicorn也是用Ruby编写的。Unicorn的很大一部分是用CHave编写的。你看到统计比较了吗?我也听到有人这样说(可能是真的),但在web上找不到真正的统计比较……我认为没有人真正对Webrick进行基准测试,因为它不打算成为生产服务器。独角兽、瘦子或乘客都得到了很好的支持,而且是更好的选择。与其他像杂种狗这样的动物相比,它的速度很慢。肯,我真的没有提出这个问题来辩论任何事情。我真的很想知道答案,因为我在任何地方都找不到真实的数据,而每个人都理所当然地认为Webrick是次等的。我不属于任何一个党派,你提到的辩论是我出于真正的好奇而提出的问题。我怎样才能重新表述这个问题,使它看起来不是那样?这是一个好问题。像这样的问题不应该结束。它们既有用又有帮助。所有自封的内容警察都应该退后。我通过谷歌搜索“为什么不在制作中使用WEBrick?”发现了这一点,因为这是一个我想要回答的问题。我并不想在生产中使用WEBrick,但我确实觉得每个人都说“因为这显然不是为了生产®”很烦人。如果是这样的话,人们就不会像@Vlad所说的那样在最后询问StackOverflow之前研究这个问题了。公认的答案是有帮助的;至少指出了一些缺失的特性。切题地说,坚持一个问题被关闭,因为你认为它没有实际意义,而不提供你自己的答案是没有帮助的。此外,根据我的经验,当我在开发软件时,Webrick失去了连接并自动关闭。当我在Heroku PaaS中选择Webrick时,自动关闭通过高速自动打开来补偿(通过Heroku的自动架构激发)它不是单线程的。或者它与任何现代脚本语言的实现方式相同(使用GIL)。但是webrick中的数据库访问和IO是完全多线程的。