只是想获得人们对使用Unicorn vs Thin作为Rails服务器的意见。 我在网上find的大多数文章/基准看起来都不完整,所以最好有一个集中的地方来讨论它。 Unicron是一个多进程的服务器,而thin是一个基于事件的/非阻塞的服务器。 基于事件的服务器是伟大的…如果你的代码是asynchronous/非阻塞的 – 香草栏是阻塞的。 所以除非你使用非阻塞的rails库,否则我真的没有看到使用Thin的好处。 更糟糕的是,在一个非阻塞的服务器中,如果你的I / O循环被阻塞了,你将会阻塞整个循环,直到阻塞调用返回之前,不能处理更多的请求。 阻止图书馆将减速减速! 为什么HerokuselectThin作为他们的默认服务器(雪松)? 他们是聪明的人,所以我相信他们有一个理由。 贝娄是一个链接,build议用4个独angular兽的工人代替瘦 – 这对我来说是完全有意义的。 Heroku上的4名Unicron工人
我已经开始使用Thin-Thin开始Thin。 但是,我想Thin是默认的,而不是WEBrick,并且能够使用rails s来启动它。 有没有一种方法可以在Rails 3中将Thin设置为默认值而不是WEBrick? 如果这是不可能的,至less有一种方法可以在testing环境中自动启动它?
我试图完全理解Rack中并发请求处理的选项。 我已经使用async_sinatra构build了一个长轮询应用程序,现在正在使用throw :async和/或Thin's -threaded标志尝试裸机。 我对这个主题感到满意,但有些东西我无法理解。 (不,我没有错在并行性的并行性,是的,我明白GIL的限制)。 Q1。 我的testing表明, thin –threaded (即rack.multithread=true )在单独的线程(我假设使用EM)同时运行请求,这意味着长时间运行的请求A不会阻止请求B(IO旁)。 这意味着我的应用程序不需要任何特殊的编码(例如callback)来实现并发(同样,忽略阻塞DB调用,IO等)。 这是我相信我所观察到的 – 这是正确的吗? Q2。 还有另外一个讨论实现并发的方法,涉及到EventMachine.defer和throw :async 。 严格来说,请求不是使用线程处理的。 他们被串行处理,但是将他们的繁重工作和callback传递给EventMachine,后者使用async.callback在以后发送响应。 在请求A已经将其工作卸载到EM.defer之后,请求B开始。 它是否正确? Q3。 假设上面的或多或less是正确的, 那么一种方法比另一种更有优势吗? 显然 – –threaded看起来像一个神奇的子弹。 有什么缺点吗? 如果没有,为什么每个人都在谈论async_sinatra / throw :async / async.callback ? 也许前者是“我想让我的Rails应用程序在重负载下稍微快一点”,而后者更适合具有许多长时间运行请求的应用程序? 或者也许规模是一个因素? 只是在这里猜测。 我在MRI Ruby 1.9.2上运行Thin 1.2.11。 (仅供参考,我必须使用–no-epoll标志,因为在EventMachine中使用epoll和Ruby 1.9.2有一个长久的,被认为已经解决但并非真正的问题 。洞察力是受欢迎的。)
我最近发现,有些人更喜欢使用unicorn_rails而不是默认的WEBrick作为开发Rails应用程序的Web服务器。 我知道如果我想在生产中使用独angular兽,在开发过程中尝试一下可能是有意义的,但是由于configuration在生产中是不同的,它甚至是相关的吗? 使用thin或unicorn代替WEBrick来开发Rails应用程序(比如速度或其他function)有什么实际的,有形的优势? 或者这只是个人喜好的问题?
我最近把我的应用程序升级到了heroku的雪松平台。 默认情况下,我使用thin作为Web服务器。 但是我一直很想用unicorn来实现并发性,并让我的美元换成父亲。 但是我担心在使用Thin之外的一些问题。 有没有人有这个决定真实的生活经验? 谢谢! 乔纳森 笔记: 这篇文章让我对这个想法感到兴奋: http : //michaelvanrooijen.com/articles/2011/06/01-more-concurrency-on-a-single-heroku-dyno-with-the-new-celadon-雪松堆栈/ 我知道每个应用程序是不同的,你应该build立一个登台环境,并为自己尝试。 但是,如果在你的升级环境下它看起来很棒,那么我们应该知道哪些陷阱? 我想知道为什么大家不应该这样做的原因
我不能在窗口上安装薄gem。 在构build本机扩展期间会发生某些事情。 有人遇到同样的问题吗? 这是堆栈跟踪: >gem install thin –no-ri –no-rdoc Temporarily enhancing PATH to include DevKit… Building native extensions. This could take a while… ERROR: Error installing thin: ERROR: Failed to build gem native extension. C:/Ruby/bin/ruby.exe extconf.rb checking for rb_trap_immediate in ruby.h,rubysig.h… no checking for rb_thread_blocking_region()… yes checking for inotify_init() in sys/inotify.h… no checking for __NR_inotify_init […]
这似乎是理所当然的,你不能使用Webrick作为生产服务器,但我真的找不到任何提及为什么。 共识似乎是:“Webrick可以发展,但是Thin或Unicorn是生产的select,期间。” 我查了一下Thin服务器的主页,它提到了每秒的请求数,但是我没有真正理解这个图,因为没有注释。 谁能让我知道为什么我应该使用薄或独angular兽相比Webrick? 使用Webrick进行开发也有什么好处吗? 我一直使用Webrick,因为它带有rails,我认为应该有一个默认的原因。 顺便说一句,我正在使用Heroku。