Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Webrick作为生产服务器与Thin或Unicorn?_Ruby On Rails_Production Environment_Thin_Webrick_Unicorn - Fatal编程技术网

Ruby on rails Webrick作为生产服务器与Thin或Unicorn?

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

似乎大家都认为不能将Webrick用作生产服务器是理所当然的,但我真的找不到任何地方提到原因。共识似乎是: “Webrick适合开发,但Thin或Unicorn是生产的选择,请注意。”

我确实查阅了Thin server的主页,其中谈到了每秒请求数,但我并不真正理解该图,因为没有注释

有人能告诉我为什么我应该使用瘦或独角兽相比Webrick吗?使用Webrick进行开发有什么好处吗?自从Webrick与rails一起出现以来,我一直在使用它,我认为这应该是默认的原因


顺便说一句,我正在使用Heroku。有几个重要的原因

  • 它是用Ruby编写的(请参阅)
  • 已编辑它没有生产网站通常需要的许多功能,如多个工作人员(特别是预分叉、生命周期管理、异步处理等)、重定向、重写等
  • 当我提到重定向/重写时,我指的是使用Webrick时,您必须在不同的层(Rack、Sinatra、Rails、自定义Webrick代码等)处理重写。这需要您启动额外的ruby“处理程序”来执行重写代码。对于一个低流量的站点,这可能是好的,因为您可能已经有了预热过程,但什么都没有做。然而,对于流量更高的站点,这是服务器上的额外负载,前端服务器(Apache、Nginx等)可以在不启动Ruby*的情况下处理这些负载,而且可能要快几个数量级


    *例如,如果您在负载平衡器后面运行,则可以将所有重写流量路由到未安装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是完全多线程的。