<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" xml:lang="en-US">
  <title>WebROaR - Ruby Application Server</title>
  <id>tag:webroar.in,2012:mephisto/</id>
  <generator uri="http://mephistoblog.com" version="0.8.0">Mephisto Drax</generator>
  
  <link href="http://webroar.in/blog/" rel="alternate" type="text/html" />
  <updated>2011-10-14T10:03:48Z</updated>
  <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/WebROaR-RubyApplicationServer-Blog" /><feedburner:info uri="webroar-rubyapplicationserver-blog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry xml:base="http://webroar.in/blog/">
    <author>
      <name>webroarblogadmin</name>
    </author>
    <id>tag:webroar.in,2011-10-14:578</id>
    <published>2011-10-14T09:59:00Z</published>
    <updated>2011-10-14T10:03:48Z</updated>
    <category term="Releases" />
    <link href="http://feedproxy.google.com/~r/WebROaR-RubyApplicationServer-Blog/~3/1VzOa0ok7fI/webroar-v0-7-0-upgraded-admin-panel-to-rails-3-0-9" rel="alternate" type="text/html" />
    <title>WebROaR v0.7.0 – Upgraded Admin Panel to Rails 3.0.9</title>
<summary type="html">&lt;p&gt;We are proud to announce release of WebROaR v0.7.0 with upgraded Admin Panel and few bug fixes.&lt;/p&gt;

&lt;p&gt;There is no change to core functionality of the server. To make the server compatible with latest Rubygems, we have upgraded Admin Panel to Rails 3.0.9. &lt;/p&gt;</summary><content type="html">
            &lt;p&gt;We are proud to announce release of WebROaR v0.7.0 with upgraded Admin Panel and few bug fixes.&lt;/p&gt;

&lt;p&gt;There is no change to core functionality of the server. To make the server compatible with latest Rubygems, we have upgraded Admin Panel to Rails 3.0.9. &lt;/p&gt;
&lt;p&gt;Here is the list of changes since  v0.6.1 release:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Upgraded Admin Panel to Rails 3.0.9.&lt;/li&gt;
&lt;li&gt;Fixed logic to find out latest installed version.&lt;/li&gt;
&lt;li&gt;Fixed 'user.yml' file importing issue.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Install Commands&lt;/h2&gt;

&lt;pre&gt;&lt;code&gt;sudo gem install webroar
sudo webroar install
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;In case you have a previous installation of WebROaR, the install would give an option to import previous configuration, logs and admin panel data. Or you can also choose to install afresh and deploy your application(s) again.&lt;/p&gt;

&lt;p&gt;Refer to &lt;a href="http://webroar.in/user-guide.html"&gt;WebROaR User Guide&lt;/a&gt; for more detailed information.&lt;/p&gt;

&lt;p&gt;We are thankful to all the people who reported issues on Lighthouse and to the mailing list. We would be glad to receive more feedback/comments and bug-reports. Please run your ruby web applications on WebROaR and give us your valuable feedback. You feedback is much appriciated.&lt;/p&gt;
          &lt;img src="http://feeds.feedburner.com/~r/WebROaR-RubyApplicationServer-Blog/~4/1VzOa0ok7fI" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://webroar.in/blog/2011/10/14/webroar-v0-7-0-upgraded-admin-panel-to-rails-3-0-9</feedburner:origLink></entry>
  <entry xml:base="http://webroar.in/blog/">
    <author>
      <name>webroarblogadmin</name>
    </author>
    <id>tag:webroar.in,2011-09-19:558</id>
    <published>2011-09-19T14:00:00Z</published>
    <updated>2011-09-20T06:50:36Z</updated>
    <category term="Releases" />
    <link href="http://feedproxy.google.com/~r/WebROaR-RubyApplicationServer-Blog/~3/5txI7vbZYOM/webroar-v0-6-0-admin-panel-enhancement" rel="alternate" type="text/html" />
    <title>WebROaR v0.6.1 - Admin Panel Enhancement</title>
<summary type="html">&lt;p&gt;We are happy to announce the release of WebROaR v0.6.1 with a couple of new features and critical bug fixes.&lt;/p&gt;

&lt;p&gt;Now the users can send their valuable feedback, and report any bug from "Contact Us" page of the Admin Panel. For that you need to configure mail setting from "Configuration" page.&lt;/p&gt;

&lt;p&gt;This release added support to disable Admin Panel and Analytics feature. These features can be controlled from 'conf/server&lt;em&gt;internal&lt;/em&gt;config.yml' file.&lt;/p&gt;

&lt;p&gt;Previous version of Admin Panel shows backtrace and environment details of the last occurred exception. But now it shows backtrace and environment details from all the exceptions.&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;We are happy to announce the release of WebROaR v0.6.1 with a couple of new features and critical bug fixes.&lt;/p&gt;

&lt;p&gt;Now the users can send their valuable feedback, and report any bug from "Contact Us" page of the Admin Panel. For that you need to configure mail setting from "Configuration" page.&lt;/p&gt;

&lt;p&gt;This release added support to disable Admin Panel and Analytics feature. These features can be controlled from 'conf/server&lt;em&gt;internal&lt;/em&gt;config.yml' file.&lt;/p&gt;

&lt;p&gt;Previous version of Admin Panel shows backtrace and environment details of the last occurred exception. But now it shows backtrace and environment details from all the exceptions.&lt;/p&gt;
&lt;p&gt;Here is the list of changes since v0.5.0 release.&lt;/p&gt;

&lt;h2&gt;New Features&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Added Feedback and Report Bug forms in Admin Panel.&lt;/li&gt;
&lt;li&gt;Support to disable Admin Panel on server startup.&lt;/li&gt;
&lt;li&gt;Support to disable Analytics feature.&lt;/li&gt;
&lt;li&gt;Show backtrace and environment details of each exceptions.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Fixes&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Fixed server crashing issue with Ubuntu 11.04.&lt;/li&gt;
&lt;li&gt;Fixed file import issue by importing 'server&lt;em&gt;internal&lt;/em&gt;config.yml' file.&lt;/li&gt;
&lt;li&gt;Now closing session after password change of Admin Panel.&lt;/li&gt;
&lt;li&gt;Fixed SSL issue in libebb.&lt;/li&gt;
&lt;li&gt;Changed images used in Admin Panel.&lt;/li&gt;
&lt;li&gt;Moved Email module to Admin Panel&lt;/li&gt;
&lt;li&gt;Added current directory in load_path($:) to make the server compatible with Ruby&gt;=1.9.2.&lt;/li&gt;
&lt;li&gt;Fixed Javascript and Stylesheet loading problem for Rails 3 Application.&lt;/li&gt;
&lt;li&gt;Added helpers to run Admin Panel with Ruby 1.9.3.&lt;/li&gt;
&lt;li&gt;Fixed invalid byte sequence issue to run Admin Panel with Ruby 1.9.2.&lt;/li&gt;
&lt;li&gt;Corrected spec test cases.&lt;/li&gt;
&lt;li&gt;Fixed condition satement to check Rails version in adapter.&lt;/li&gt;
&lt;li&gt;Upgraded Admin Panel and Test App to Rails 2.3.9.&lt;/li&gt;
&lt;li&gt;Upgraded open&lt;em&gt;flash&lt;/em&gt;chart_2 plugin.&lt;/li&gt;
&lt;li&gt;Corrected check condition to start exception tracker.&lt;/li&gt;
&lt;li&gt;Defined modules for server commands.&lt;/li&gt;
&lt;li&gt;Corrected default value of min and max workers for application&lt;/li&gt;
&lt;li&gt;Added link to stop an application from Admin Panel.&lt;/li&gt;
&lt;li&gt;Improved and cleaned up Analyzer module.&lt;/li&gt;
&lt;li&gt;Fixed paginate plugin issue by correcting javascript to generate Ajax request.&lt;/li&gt;
&lt;li&gt;Commented copyright message in Admin Panel's views.&lt;/li&gt;
&lt;li&gt;Hacked 'environment.rb' to fix 'version_requirements' method issue with RubyGems 1.5.x&lt;/li&gt;
&lt;li&gt;Fixed code compilation issue with Mac OS.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Install Commands&lt;/h2&gt;

&lt;pre&gt;&lt;code&gt;sudo gem install webroar
sudo webroar install
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;In case you have a previous installation of WebROaR, the install would give an option to import previous configuration, logs and admin panel data. Or you can also choose to install afresh and deploy your application(s) again.&lt;/p&gt;

&lt;p&gt;Refer to &lt;a href="http://webroar.in/user-guide.html"&gt;WebROaR User Guide&lt;/a&gt; for more detailed information.&lt;/p&gt;

&lt;p&gt;We are thankful to all the people who reported issues on Lighthouse and to the mailing list. We would be glad to receive more feedback/comments and bug-reports. Please run your ruby web applications on WebROaR and give us your valuable feedback. You feedback is much appriciated.&lt;/p&gt;
          &lt;img src="http://feeds.feedburner.com/~r/WebROaR-RubyApplicationServer-Blog/~4/5txI7vbZYOM" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://webroar.in/blog/2011/9/19/webroar-v0-6-0-admin-panel-enhancement</feedburner:origLink></entry>
  <entry xml:base="http://webroar.in/blog/">
    <author>
      <name>Nikunj Limbaseeya</name>
    </author>
    <id>tag:webroar.in,2011-02-16:397</id>
    <published>2011-02-16T13:55:00Z</published>
    <updated>2011-09-20T06:51:36Z</updated>
    <category term="Releases" />
    <link href="http://feedproxy.google.com/~r/WebROaR-RubyApplicationServer-Blog/~3/13-FpQV_Q4k/webroar-v0-5-0-supports-gzip-encoding-and-filtering-exceptions" rel="alternate" type="text/html" />
    <title>WebROaR v0.5.0 - Supports gzip Encoding and Filtering Exceptions</title>
<summary type="html">&lt;p&gt;We are happy to announce the release of WebROaR v0.5.0 with some new features, enhancement and fixes.&lt;/p&gt;

&lt;p&gt;This release added support to filter out known exceptions at application level and these filtered exceptions are listed in Permanently Ignored list.&lt;/p&gt;

&lt;p&gt;The previous version of the server supports only 'deflate' encoding for static assets. Now, 'gzip' encoding is also supported with this release.&lt;/p&gt;

&lt;p&gt;We have also added command line support to add/remove an application form its root directory. User can simply deploy an application from its root directory by executing command 'webroar add'. It would deploy the application using default parameters. Of course, you can pass parameters to overwrite default parameters.&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;We are happy to announce the release of WebROaR v0.5.0 with some new features, enhancement and fixes.&lt;/p&gt;

&lt;p&gt;This release added support to filter out known exceptions at application level and these filtered exceptions are listed in Permanently Ignored list.&lt;/p&gt;

&lt;p&gt;The previous version of the server supports only 'deflate' encoding for static assets. Now, 'gzip' encoding is also supported with this release.&lt;/p&gt;

&lt;p&gt;We have also added command line support to add/remove an application form its root directory. User can simply deploy an application from its root directory by executing command 'webroar add'. It would deploy the application using default parameters. Of course, you can pass parameters to overwrite default parameters.&lt;/p&gt;
&lt;p&gt;Here is the list of changes after v0.4.0 release:&lt;/p&gt;

&lt;h2&gt;New Features&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Added support to filter out know exceptions.&lt;/li&gt;
&lt;li&gt;The number of exceptions displayed in exception list made configurable.&lt;/li&gt;
&lt;li&gt;Support gzip encoding for static assets.&lt;/li&gt;
&lt;li&gt;Support for adding/removing applications from its root directory with default parameters.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Fixes&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Support to render static assets for Rails 3 application.&lt;/li&gt;
&lt;li&gt;Updated test cases.&lt;/li&gt;
&lt;li&gt;Implemented new YAML parser to handle lists and associative arrays.&lt;/li&gt;
&lt;li&gt;Added client side validations on Admin Panel.&lt;/li&gt;
&lt;li&gt;Code clean-up in Admin Panel.&lt;/li&gt;
&lt;li&gt;Corrected rendering of graph partials.&lt;/li&gt;
&lt;li&gt;Improve popup windows used to display help messages.&lt;/li&gt;
&lt;li&gt;Corrected checkbox selection functionality on exception listing page.&lt;/li&gt;
&lt;li&gt;Check Cache-Control header before choosing encoding. This fixes an issue of static content encoding on IE6.&lt;/li&gt;
&lt;li&gt;Update values on Admin Panel home page using single Ajax request.&lt;/li&gt;
&lt;li&gt;Wrapped multi statement macros in do..while structure.&lt;/li&gt;
&lt;li&gt;Fixed rack dependency issue.&lt;/li&gt;
&lt;li&gt;Improve the logic of exiting worker gracefully if there is an error.&lt;/li&gt;
&lt;li&gt;Fixed starling dependency issue with Rails 3 application.&lt;/li&gt;
&lt;li&gt;Kept strict dependency for Rspec 1.3.x.&lt;/li&gt;
&lt;li&gt;Fixed QUERY_STRING issue faced with Rails 3 application.&lt;/li&gt;
&lt;li&gt;Clean-up and improve migration scripts.&lt;/li&gt;
&lt;li&gt;Updated libyaml to v0.1.3&lt;/li&gt;
&lt;li&gt;Upgraded Libev to v3.9.&lt;/li&gt;
&lt;li&gt;Improved Ajax call on Analytics page.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Install Commands&lt;/h2&gt;

&lt;pre&gt;&lt;code&gt;sudo gem install webroar
sudo webroar install
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;In case you have a previous installation of WebROaR, the install would give an option to import previous configuration, logs and admin panel data. Or you can also choose to install afresh and deploy your application(s) again.&lt;/p&gt;

&lt;p&gt;You can also refer the &lt;a href="http://webroar.in/user-guide.html"&gt;WebROaR User Guide&lt;/a&gt; for more detailed information.&lt;/p&gt;

&lt;p&gt;We are thankful to all the people who reported the issues on Lighthouse and the mailing list. We would be very happy to receive more feedback/comments and bug-reports. Look forward to your support for WebROaR, please run your ruby web application on it and let us know how it goes.&lt;/p&gt;
          &lt;img src="http://feeds.feedburner.com/~r/WebROaR-RubyApplicationServer-Blog/~4/13-FpQV_Q4k" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://webroar.in/blog/2011/2/16/webroar-v0-5-0-supports-gzip-encoding-and-filtering-exceptions</feedburner:origLink></entry>
  <entry xml:base="http://webroar.in/blog/">
    <author>
      <name>Dharmarth Shah</name>
    </author>
    <id>tag:webroar.in,2010-08-09:319</id>
    <published>2010-08-09T12:56:00Z</published>
    <updated>2010-08-10T07:44:51Z</updated>
    <category term="Releases" />
    <link href="http://feedproxy.google.com/~r/WebROaR-RubyApplicationServer-Blog/~3/fIDE29Y_vJw/webroar-v0-4-0-supports-static-assets-encoding-and-static-ruby-library" rel="alternate" type="text/html" />
    <title>WebROaR v0.4.0 - Supports Static Assets Encoding and Static Ruby Library</title>
<summary type="html">&lt;p&gt;WebROaR is under continuous development. We are happy to announce release of WebROaR v0.4.0 which contains new features, enhancements and bug fixes. &lt;/p&gt;

&lt;p&gt;Previous versions of WebROaR were supporting 'gzip' and 'deflate' content encoding for dynamic response.  In this release, we have added support for  'deflate' content encoding of static assets. By default content encoding is supported for content type 'javascript|css|xml|text' having actual content size greater than 1KB and less than 10MB for all the user agent. Content type, size and user agent is configurable through 'config.yml' file.&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;WebROaR is under continuous development. We are happy to announce release of WebROaR v0.4.0 which contains new features, enhancements and bug fixes. &lt;/p&gt;

&lt;p&gt;Previous versions of WebROaR were supporting 'gzip' and 'deflate' content encoding for dynamic response.  In this release, we have added support for  'deflate' content encoding of static assets. By default content encoding is supported for content type 'javascript|css|xml|text' having actual content size greater than 1KB and less than 10MB for all the user agent. Content type, size and user agent is configurable through 'config.yml' file.&lt;/p&gt;
&lt;p&gt;Here is the list of changes after v0.3.1 release:&lt;/p&gt;

&lt;h2&gt;New Features&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Supports deflate encoding for static assets.&lt;/li&gt;
&lt;li&gt;Support for passing environment variables to application.&lt;/li&gt;
&lt;li&gt;Support to build server with static Ruby library.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Fixes&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Tested on Ruby 1.9.2 RC2&lt;/li&gt;
&lt;li&gt;Tested on Ubuntu 10.04.&lt;/li&gt;
&lt;li&gt;Directory path expanded when application is added from command line. (It
would allow to pass relative path)&lt;/li&gt;
&lt;li&gt;Fixed incorrect response code of static assets by using 'timegm' function 
instead of 'mktime'.&lt;/li&gt;
&lt;li&gt;Requiring version.rb using relative path, to work with Ruby 1.9.2.&lt;/li&gt;
&lt;li&gt;Added Config::CONFIG['rubyhdrdir'] in ruby headers search path for Ruby 1.9.&lt;/li&gt;
&lt;li&gt;Sends '503 Service Unavailable' response, if pending message queue overflows.&lt;/li&gt;
&lt;li&gt;Code cleanup in Rake tasks.&lt;/li&gt;
&lt;li&gt;Enhanced SCGI request parsing in Admin Panel to handle chunked request.&lt;/li&gt;
&lt;li&gt;Added tests for application add, remove and zero down time during restart.&lt;/li&gt;
&lt;li&gt;Added Config::CONFIG['includedir'] in include directory list.&lt;/li&gt;
&lt;li&gt;Supports Rails 3 application.&lt;/li&gt;
&lt;li&gt;Created 'config.yml' file with default configuration if it is not found while
importing.&lt;/li&gt;
&lt;li&gt;Added support to start/stop/restart static-worker.&lt;/li&gt;
&lt;li&gt;Support to view analytics data for all the application, earlier it was only 
for the application which has analytics enabled.&lt;/li&gt;
&lt;li&gt;Saving log files after executing load test.&lt;/li&gt;
&lt;li&gt;Improved rake task to execute test-suite.&lt;/li&gt;
&lt;li&gt;Set Expires headers from Admin Panel.&lt;/li&gt;
&lt;li&gt;Server specification code cleanup in Admin Panel.&lt;/li&gt;
&lt;li&gt;Passing application configuration parameters to worker using SCGI.&lt;/li&gt;
&lt;li&gt;Email notification for the captured exceptions made configurable.&lt;/li&gt;
&lt;li&gt;Made many server parameters configurable through config file 
'server&lt;em&gt;internal&lt;/em&gt;config.yml'.&lt;/li&gt;
&lt;li&gt;Sends ERROR control message, if application could not be loaded by worker.&lt;/li&gt;
&lt;li&gt;Wait for 30 minutes before creating new worker, if three consecutive newly 
created worker got timed out.&lt;/li&gt;
&lt;li&gt;Removed 'Cache-Control' response header from static assets. Its incorrect 
handling choking IE 6.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Install Commands:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo gem install webroar
sudo webroar install
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;In case you have a previous installation of WebROaR, the install would give an option to import previous configuration, logs and admin panel data. Or you can also choose to install afresh and deploy your application(s) again.&lt;/p&gt;

&lt;p&gt;You can also refer the &lt;a href="http://webroar.in/user-guide.html"&gt;WebROaR User Guide&lt;/a&gt; for more detailed information.&lt;/p&gt;

&lt;p&gt;We are thankful to all the people who reported the issues on Lighthouse and the mailing list. We would be very happy to receive more feedback/comments and bug-reports. Look forward to your support for WebROaR, please run your ruby web application on it and let us know how it goes.&lt;/p&gt;
          &lt;img src="http://feeds.feedburner.com/~r/WebROaR-RubyApplicationServer-Blog/~4/fIDE29Y_vJw" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://webroar.in/blog/2010/8/9/webroar-v0-4-0-supports-static-assets-encoding-and-static-ruby-library</feedburner:origLink></entry>
  <entry xml:base="http://webroar.in/blog/">
    <author>
      <name>vineet tyagi</name>
    </author>
    <id>tag:webroar.in,2010-03-25:316</id>
    <published>2010-03-25T12:09:00Z</published>
    <updated>2010-03-25T12:10:26Z</updated>
    <category term="changes" />
    <link href="http://feedproxy.google.com/~r/WebROaR-RubyApplicationServer-Blog/~3/0mXKBNg8YTI/team-changes" rel="alternate" type="text/html" />
    <title>Team Changes</title>
<content type="html">
            Sadly Aditya has decided to pursue his other aspirations, given his new dream would require a substantial amount of his time, he would no longer be actively contributing to the project. Best of luck to him. 
&lt;p&gt;
While Aditya will be missed, we have exciting new features to be built in WebROaR for which Dharmarth, Nikunj and I would continue to support the project as usual. You can communicate with me on vineet DOT tyagi AT webroar DOT in 
&lt;p&gt;
PS: We would be looking for more like minded people to join the project, if you think you have what it takes please drop us an introduction at vineet DOT tyagi AT webroar DOT in
          &lt;img src="http://feeds.feedburner.com/~r/WebROaR-RubyApplicationServer-Blog/~4/0mXKBNg8YTI" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://webroar.in/blog/2010/3/25/team-changes</feedburner:origLink></entry>
  <entry xml:base="http://webroar.in/blog/">
    <author>
      <name>Aditya Babbar</name>
    </author>
    <id>tag:webroar.in,2010-03-22:315</id>
    <published>2010-03-22T16:41:00Z</published>
    <updated>2010-03-23T06:16:18Z</updated>
    <category term="Releases" />
    <link href="http://feedproxy.google.com/~r/WebROaR-RubyApplicationServer-Blog/~3/p2fViyqwzWI/webroar-v0-3-1-supports-zero-downtime-application-upgrades" rel="alternate" type="text/html" />
    <title>WebROaR v0.3.1 - Supports Zero Downtime Application Upgrades</title>
<summary type="html">&lt;p&gt;We are happy to announce the release of WebROaR v0.3.1 that supports &lt;strong&gt;Zero Downtime Application Upgrades&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;The previous versions of the server already allowed restart of a single application at a time without affecting the other apps hosted on it. We have further improved the logic now, to ensure even the particular application being restarted, does not become unavailable at any time. &lt;/p&gt;</summary><content type="html">
            &lt;p&gt;We are happy to announce the release of WebROaR v0.3.1 that supports &lt;strong&gt;Zero Downtime Application Upgrades&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;The previous versions of the server already allowed restart of a single application at a time without affecting the other apps hosted on it. We have further improved the logic now, to ensure even the particular application being restarted, does not become unavailable at any time. &lt;/p&gt;
&lt;p&gt;Here is the sequence of events when an application is restarted:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;The head process receives a request to restart one particular application. This can happen through &lt;strong&gt;sudo webroar restart [APPNAME]&lt;/strong&gt; command triggered via console or a Capistrano script. The application can also be restarted through the Admin Panel.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Head forks off a new worker asking it to load the upgraded application from the disk.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;As soon as the new worker successfully connects back, the head kills off the free old workers. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If current worker count is less than the minimum number of workers configured for an application, head instantiates the desired number of new workers to reach this threshold limit.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;All new/pending requests are sent to the new worker(s).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The busy old workers gracefully exit after processing their current request. A new worker is instantiated for each busy worker that exits. (This controlled spawning of new workers ensures judicious use of system resources especially the RAM.)&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Essentially, the aim is to ensure that the server processes &lt;em&gt;all&lt;/em&gt; the requests properly without any error(s) or any kind of slow down.&lt;/p&gt;

&lt;p&gt;Of course, this strategy would not work well for upgrades involving migrations. But it does come in handy for on-the-fly code updates without throwing yet another 'Under Maintenance' notice for the customers.&lt;/p&gt;

&lt;p&gt;Here is the list of changes after v0.2.6 release:&lt;/p&gt;

&lt;h2&gt;New Features&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Support for Zero Downtime Application Upgrades.&lt;/li&gt;
&lt;li&gt;Full support for adding/removing applications from command line. (Earlier 
it was only possible through the Admin Panel.)&lt;/li&gt;
&lt;li&gt;Full support for non interactive installation of the server.&lt;/li&gt;
&lt;li&gt;Support for passing additional include and library paths for server 
compilation.&lt;/li&gt;
&lt;li&gt;Display error trace directly on the Admin Panel or the console if the 
application start/stop/restart command fails.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Fixes&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Moved Admin Panel to our vendor Rails to fix ActionPack 2.3.5 and Rack 
dependency issue.&lt;/li&gt;
&lt;li&gt;Fixed unit tests to make them run on Mac OS and Arch Linux.&lt;/li&gt;
&lt;li&gt;Query optimizations on exception listing page of the Admin Panel.&lt;/li&gt;
&lt;li&gt;Usability improvements on exception listing page of the Admin Panel -&lt;br /&gt;
Pagination and multiple selects.&lt;/li&gt;
&lt;li&gt;Stopped sending email notifications for ignored exceptions.&lt;/li&gt;
&lt;li&gt;Fixed overruling of the '--ssl-support' option while importing configuration 
file from a previous installation.&lt;/li&gt;
&lt;li&gt;Fixed service script generation issue for Arch Linux (Ticket #4).&lt;/li&gt;
&lt;li&gt;Handled Memcache client's timeout error by overriding timeout value to 15 
seconds when sending worker's PID (Ticket #14).&lt;/li&gt;
&lt;li&gt;Handled application control signal connection breaking issue.&lt;/li&gt;
&lt;li&gt;Fixed multiple host name resolving issue (Ticket #15).&lt;/li&gt;
&lt;li&gt;Fixed the handling of static files with extensions in Upper Case.&lt;/li&gt;
&lt;li&gt;Fixed flash crash issue when viewing URL graphs for the applications 
having data for 40K or more requests.&lt;/li&gt;
&lt;li&gt;Fixed overruling of access log setting while updating the SSL configuration.&lt;/li&gt;
&lt;li&gt;Removed dependency of starling-starling gem on Github. The server now uses 
starling gem on Gemcutter.&lt;/li&gt;
&lt;li&gt;Removed application from server's in-memory list if all of it's workers&lt;br /&gt;
fail to connect back to the head.&lt;/li&gt;
&lt;li&gt;Solved the Admin Panel menu options vanishing issue by setting color of the 
links on the top menu bar.&lt;/li&gt;
&lt;li&gt;Set default value of minimum and maximum numbers of workers to 4 and 8 
respectively in wr_config.h&lt;/li&gt;
&lt;li&gt;Code cleanup in Analyzer and 'lib' modules.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Install Commands:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo gem install webroar
sudo webroar install
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;In case you have a previous installation of WebROaR, the install would give an option to import previous configuration, logs and admin panel data. Or you can also choose to install afresh and deploy your application(s) again.&lt;/p&gt;

&lt;p&gt;You can also refer the &lt;a href="http://webroar.in/user-guide.html"&gt;WebROaR User Guide&lt;/a&gt; for more detailed information.&lt;/p&gt;

&lt;p&gt;We are thankful to all the people who reported the issues on Lighthouse and the mailing list. We would be very happy to receive more feedback/comments and bug-reports. If you have some time, please run your ruby web application on it and let us know how it goes.&lt;/p&gt;
          &lt;img src="http://feeds.feedburner.com/~r/WebROaR-RubyApplicationServer-Blog/~4/p2fViyqwzWI" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://webroar.in/blog/2010/3/22/webroar-v0-3-1-supports-zero-downtime-application-upgrades</feedburner:origLink></entry>
  <entry xml:base="http://webroar.in/blog/">
    <author>
      <name>Aditya Babbar</name>
    </author>
    <id>tag:webroar.in,2009-12-23:183</id>
    <published>2009-12-23T09:58:00Z</published>
    <updated>2009-12-23T09:59:02Z</updated>
    <category term="Releases" />
    <link href="http://feedproxy.google.com/~r/WebROaR-RubyApplicationServer-Blog/~3/SMjnxfeAJts/webroar-v0-2-6-bugfix-release" rel="alternate" type="text/html" />
    <title>WebROaR v0.2.6 - Bugfix Release</title>
<summary type="html">&lt;p&gt;WebROaR v0.2.6 gem is now available with the following fixes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Updated messages for HTTP status codes 400, 404, 405, 500 and 501.&lt;/li&gt;
&lt;li&gt;Fixed buffer overflow by allocating enough memory to hold REQUEST_PATH + 
Application-Path in the request resolver for static assets.&lt;/li&gt;
&lt;li&gt;Improved the logic for detection of ruby shared library prerequisite.&lt;/li&gt;
&lt;li&gt;Started using RUBY_INSTALL_NAME for detecting ruby during installation.&lt;/li&gt;
&lt;li&gt;Added validation for search results file created while generating service 
script. Installation would continue even if server cannot be installed as a 
service.&lt;/li&gt;
&lt;li&gt;Corrected example for the 'Headers' section in the config file.&lt;/li&gt;
&lt;li&gt;Removed 'SIGCHLD' handler from the worker process - Fixes the incorrect exit 
status issue for a shell command executed using backquote method of ruby.&lt;/li&gt;
&lt;li&gt;Added HTTP Date header when the HTTP response status is 100.&lt;/li&gt;
&lt;li&gt;Used _POSIX_C_SOURCE macro to identify whether the file variable is a 
pointer to a file or a socket fd.&lt;/li&gt;
&lt;li&gt;Corrected return type of 'send_static_worker_pid' method, if YAML parser 
returns NULL value.&lt;/li&gt;
&lt;li&gt;Corrected time slider based analytics graphs issue when they were being seen 
after 2300 hrs.&lt;/li&gt;
&lt;li&gt;Correctly implemented Rack specification for the Response Body. This fixes 
worker crash seen after serving first request in Development Environment mode 
for Rails 2.3.4+ applications.&lt;/li&gt;
&lt;li&gt;Overriding Rack::Deflater to skip response body compression for user-agent 
Internet Explorer 6.0.&lt;/li&gt;
&lt;li&gt;Renamed 'log' message defined by rb_define_singleton_method() to 
'log_message'. This fixes the issue seen when Math.log is called by
number_to_human_size() in a Rails Application. It also fixes the worker crash 
on REE installed with tcmalloc library. (Typically used to result in 404 error 
for a user trying to access the Admin Panel.) Resolves Tickets #9 and #10.&lt;/li&gt;
&lt;li&gt;Code cleanup in Head, Worker and Helper modules.&lt;/li&gt;
&lt;/ul&gt;</summary><content type="html">
            &lt;p&gt;WebROaR v0.2.6 gem is now available with the following fixes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Updated messages for HTTP status codes 400, 404, 405, 500 and 501.&lt;/li&gt;
&lt;li&gt;Fixed buffer overflow by allocating enough memory to hold REQUEST_PATH + 
Application-Path in the request resolver for static assets.&lt;/li&gt;
&lt;li&gt;Improved the logic for detection of ruby shared library prerequisite.&lt;/li&gt;
&lt;li&gt;Started using RUBY_INSTALL_NAME for detecting ruby during installation.&lt;/li&gt;
&lt;li&gt;Added validation for search results file created while generating service 
script. Installation would continue even if server cannot be installed as a 
service.&lt;/li&gt;
&lt;li&gt;Corrected example for the 'Headers' section in the config file.&lt;/li&gt;
&lt;li&gt;Removed 'SIGCHLD' handler from the worker process - Fixes the incorrect exit 
status issue for a shell command executed using backquote method of ruby.&lt;/li&gt;
&lt;li&gt;Added HTTP Date header when the HTTP response status is 100.&lt;/li&gt;
&lt;li&gt;Used _POSIX_C_SOURCE macro to identify whether the file variable is a 
pointer to a file or a socket fd.&lt;/li&gt;
&lt;li&gt;Corrected return type of 'send_static_worker_pid' method, if YAML parser 
returns NULL value.&lt;/li&gt;
&lt;li&gt;Corrected time slider based analytics graphs issue when they were being seen 
after 2300 hrs.&lt;/li&gt;
&lt;li&gt;Correctly implemented Rack specification for the Response Body. This fixes 
worker crash seen after serving first request in Development Environment mode 
for Rails 2.3.4+ applications.&lt;/li&gt;
&lt;li&gt;Overriding Rack::Deflater to skip response body compression for user-agent 
Internet Explorer 6.0.&lt;/li&gt;
&lt;li&gt;Renamed 'log' message defined by rb_define_singleton_method() to 
'log_message'. This fixes the issue seen when Math.log is called by
number_to_human_size() in a Rails Application. It also fixes the worker crash 
on REE installed with tcmalloc library. (Typically used to result in 404 error 
for a user trying to access the Admin Panel.) Resolves Tickets #9 and #10.&lt;/li&gt;
&lt;li&gt;Code cleanup in Head, Worker and Helper modules.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Install Commands:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;gem sources -a http://gems.github.com
sudo gem install webroar
sudo webroar install
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;In case you have a previous installation of WebROaR, the install would give an option to import previous configuration, logs and admin panel data. Or you can also choose to install afresh and deploy your application(s) again.&lt;/p&gt;

&lt;p&gt;We are thankful to all the people who reported the issues on Lighthouse and the mailing list. We would be very happy to receive more feedback/comments and bug-reports. If you have some time, please run your ruby web application on it and let us know how it goes.&lt;/p&gt;
          &lt;img src="http://feeds.feedburner.com/~r/WebROaR-RubyApplicationServer-Blog/~4/SMjnxfeAJts" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://webroar.in/blog/2009/12/23/webroar-v0-2-6-bugfix-release</feedburner:origLink></entry>
  <entry xml:base="http://webroar.in/blog/">
    <author>
      <name>Aditya Babbar</name>
    </author>
    <id>tag:webroar.in,2009-12-07:41</id>
    <published>2009-12-07T13:08:00Z</published>
    <updated>2009-12-07T13:46:20Z</updated>
    <category term="Releases" />
    <link href="http://feedproxy.google.com/~r/WebROaR-RubyApplicationServer-Blog/~3/1qui1TNE0ZE/webroar-v0-2-5-tested-on-snow-leopard-ruby-enterprise-edition" rel="alternate" type="text/html" />
    <title>WebROaR v0.2.5 - Tested on Snow Leopard &amp; Ruby Enterprise Edition</title>
<summary type="html">&lt;p&gt;WebROaR v0.2.5 gem is now available on Gemcutter. Change log for this release:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tested on Mac OS X v10.6 Snow Leopard &amp;amp; Ubuntu 9.10 (64-bit). &lt;/li&gt;
&lt;li&gt;Tested on Ruby Enterprise Edition 1.8.7-2009.10.&lt;/li&gt;
&lt;li&gt;Upgraded rack dependency version to &gt;=1.0.1.&lt;/li&gt;
&lt;li&gt;Upgraded rails dependency version to &gt;=2.3.5. Resolves Ticket #6.&lt;/li&gt;
&lt;li&gt;Redirected 'rake spec' output to STDOUT by default to indicate progress of test execution.&lt;/li&gt;
&lt;li&gt;Implemented exception handling (that works both on ruby 1.8 &amp;amp; 1.9) for handling errors raised in scripts being run by the embedded interpreter in the worker.&lt;/li&gt;
&lt;li&gt;Redirected standard IO right after logger is initialized in worker.&lt;/li&gt;
&lt;li&gt;Handled absolute path for install dependencies. Resolves Ticket #3 - 'Unable to locate gcc on Snow Leopard during installation'.&lt;/li&gt;
&lt;/ul&gt;</summary><content type="html">
            &lt;p&gt;WebROaR v0.2.5 gem is now available on Gemcutter. Change log for this release:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tested on Mac OS X v10.6 Snow Leopard &amp;amp; Ubuntu 9.10 (64-bit). &lt;/li&gt;
&lt;li&gt;Tested on Ruby Enterprise Edition 1.8.7-2009.10.&lt;/li&gt;
&lt;li&gt;Upgraded rack dependency version to &gt;=1.0.1.&lt;/li&gt;
&lt;li&gt;Upgraded rails dependency version to &gt;=2.3.5. Resolves Ticket #6.&lt;/li&gt;
&lt;li&gt;Redirected 'rake spec' output to STDOUT by default to indicate progress of test execution.&lt;/li&gt;
&lt;li&gt;Implemented exception handling (that works both on ruby 1.8 &amp;amp; 1.9) for handling errors raised in scripts being run by the embedded interpreter in the worker.&lt;/li&gt;
&lt;li&gt;Redirected standard IO right after logger is initialized in worker.&lt;/li&gt;
&lt;li&gt;Handled absolute path for install dependencies. Resolves Ticket #3 - 'Unable to locate gcc on Snow Leopard during installation'.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Install Commands:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;gem sources -a http://gems.github.com
sudo gem install webroar
sudo webroar install
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;In case you have a previous installation of WebROaR, the install would give an option to import previous configuration, logs and admin panel data. Or you can also choose to install afresh and deploy your application(s) again.&lt;/p&gt;

&lt;p&gt;We are trying to make the server more robust and stable, and would be very happy to receive feedback/comments and bug-reports. If you have some time, please run your ruby web application on it and let us know how it goes.&lt;/p&gt;
          &lt;img src="http://feeds.feedburner.com/~r/WebROaR-RubyApplicationServer-Blog/~4/1qui1TNE0ZE" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://webroar.in/blog/2009/12/7/webroar-v0-2-5-tested-on-snow-leopard-ruby-enterprise-edition</feedburner:origLink></entry>
  <entry xml:base="http://webroar.in/blog/">
    <author>
      <name>Aditya Babbar</name>
    </author>
    <id>tag:webroar.in,2009-12-02:21</id>
    <published>2009-12-02T12:01:00Z</published>
    <updated>2009-12-02T14:22:47Z</updated>
    <category term="Releases" />
    <link href="http://feedproxy.google.com/~r/WebROaR-RubyApplicationServer-Blog/~3/-yjMmFATtVg/webroar-v0-2-4-bugfix-release" rel="alternate" type="text/html" />
    <title>WebROaR v0.2.4 - Bugfix Release</title>
<summary type="html">&lt;p&gt;We pushed WebROaR v0.2.4 gem to Gemcutter last night with the following fixes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fixed intermittent crash issue in head while closing client connections 
by calling close_connection() directly rather than running it through
goodbye_watcher in libebb.&lt;/li&gt;
&lt;li&gt;Renamed on_error callback (introduced by us in libebb) to the more 
appropriate on_request_parse_error.&lt;/li&gt;
&lt;li&gt;Fixed install issue on ruby 1.9 caused due to invalid multibyte char.&lt;/li&gt;
&lt;li&gt;Fixed the incorrect month value in the file name format for gcore dumps.&lt;/li&gt;
&lt;li&gt;Initialized logging for the worker right as it is instantiated before 
it connects to the head process.&lt;/li&gt;
&lt;li&gt;Cleaned up wr_wkr_create() method in head/wr_worker.c.&lt;/li&gt;
&lt;li&gt;Print logging level as a string in the log files.&lt;/li&gt;
&lt;li&gt;Fixed invalid pointer being used in 'wr_req_resolve_http_req' function.&lt;/li&gt;
&lt;li&gt;Fixed creation of rack.input stream object. Resolves Ticket #2 related to 
error seen on posting form with enctype="multipart/form-data".&lt;/li&gt;
&lt;li&gt;Ensured 'starling-starling' gem is used by WebROaR even if 'starling' is 
present on the system.&lt;/li&gt;
&lt;/ul&gt;</summary><content type="html">
            &lt;p&gt;We pushed WebROaR v0.2.4 gem to Gemcutter last night with the following fixes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fixed intermittent crash issue in head while closing client connections 
by calling close_connection() directly rather than running it through
goodbye_watcher in libebb.&lt;/li&gt;
&lt;li&gt;Renamed on_error callback (introduced by us in libebb) to the more 
appropriate on_request_parse_error.&lt;/li&gt;
&lt;li&gt;Fixed install issue on ruby 1.9 caused due to invalid multibyte char.&lt;/li&gt;
&lt;li&gt;Fixed the incorrect month value in the file name format for gcore dumps.&lt;/li&gt;
&lt;li&gt;Initialized logging for the worker right as it is instantiated before 
it connects to the head process.&lt;/li&gt;
&lt;li&gt;Cleaned up wr_wkr_create() method in head/wr_worker.c.&lt;/li&gt;
&lt;li&gt;Print logging level as a string in the log files.&lt;/li&gt;
&lt;li&gt;Fixed invalid pointer being used in 'wr_req_resolve_http_req' function.&lt;/li&gt;
&lt;li&gt;Fixed creation of rack.input stream object. Resolves Ticket #2 related to 
error seen on posting form with enctype="multipart/form-data".&lt;/li&gt;
&lt;li&gt;Ensured 'starling-starling' gem is used by WebROaR even if 'starling' is 
present on the system.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Install Commands:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;gem sources -a http://gems.github.com
sudo gem install webroar
sudo webroar install
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;In case you have a previous installation of WebROaR, the install would give an option to import previous configuration, logs and admin panel data. Or you can also choose to install afresh and deploy your application(s) again.&lt;/p&gt;

&lt;p&gt;We are trying to make the server more robust and stable, and would be very happy to receive feedback/comments and bug-reports. Please run your application on it if you have some time and do let us know how it goes.&lt;/p&gt;
          &lt;img src="http://feeds.feedburner.com/~r/WebROaR-RubyApplicationServer-Blog/~4/-yjMmFATtVg" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://webroar.in/blog/2009/12/2/webroar-v0-2-4-bugfix-release</feedburner:origLink></entry>
  <entry xml:base="http://webroar.in/blog/">
    <author>
      <name>Aditya Babbar</name>
    </author>
    <id>tag:webroar.in,2009-11-25:10</id>
    <published>2009-11-25T22:04:00Z</published>
    <updated>2009-11-28T08:02:00Z</updated>
    <category term="benchmarking" />
    <link href="http://feedproxy.google.com/~r/WebROaR-RubyApplicationServer-Blog/~3/SAiMWoipd9g/comparison-of-rails-deployment-stacks-2" rel="alternate" type="text/html" />
    <title>Comparison of Rails Deployment Stacks</title>
<summary type="html">&lt;p&gt;&lt;em&gt;Why?&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;Why write this post in the first place?&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;To showoff your cool stuff?&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;To deride the other perfectly good software?&lt;/em&gt;  &lt;/p&gt;

&lt;p&gt;No, the only reason I am writing this post is to back up our statement that WebROaR is &lt;em&gt;generally&lt;/em&gt; much faster than all other comparable deployment stacks. The aim is to provide real world data and insights in to our benchmarking procedure for everyone. Honestly, there is not much fun in  performing this &lt;em&gt;long&lt;/em&gt; experiment, as we programmers do have very short attention spans. (Oh wait, let me see HN/programming reddit once again ...). &lt;/p&gt;

&lt;p&gt;The results of this comparison should be just taken as an &lt;strong&gt;indicator&lt;/strong&gt; and should act only as one of the many data points in coming up with your own conclusion about Rails deployment stacks. If you are seriously interested to know the performance numbers of &lt;em&gt;your&lt;/em&gt; application, please do try this experiment at home. :-)&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;&lt;em&gt;Why?&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;Why write this post in the first place?&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;To showoff your cool stuff?&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;To deride the other perfectly good software?&lt;/em&gt;  &lt;/p&gt;

&lt;p&gt;No, the only reason I am writing this post is to back up our statement that WebROaR is &lt;em&gt;generally&lt;/em&gt; much faster than all other comparable deployment stacks. The aim is to provide real world data and insights in to our benchmarking procedure for everyone. Honestly, there is not much fun in  performing this &lt;em&gt;long&lt;/em&gt; experiment, as we programmers do have very short attention spans. (Oh wait, let me see HN/programming reddit once again ...). &lt;/p&gt;

&lt;p&gt;The results of this comparison should be just taken as an &lt;strong&gt;indicator&lt;/strong&gt; and should act only as one of the many data points in coming up with your own conclusion about Rails deployment stacks. If you are seriously interested to know the performance numbers of &lt;em&gt;your&lt;/em&gt; application, please do try this experiment at home. :-)&lt;/p&gt;
&lt;h2&gt;Benchmarking Basics&lt;/h2&gt;

&lt;hr /&gt;

&lt;p&gt;I can't put across the basics more 'eloquently' than this &lt;a href="http://zedshaw.com/essays/programmer_stats.html"&gt;Zed Shaw essay&lt;/a&gt; and would recommend giving it a read. There are no 'eye-opening', 'lift the darkness' kind of insights in that essay, but at times we do make obvious blind mistakes while benchmarking that can be easily avoided. I hope we haven't made many of those in our experiment.&lt;/p&gt;

&lt;p&gt;We tried taking care of the following aspects for this experiment:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Ensure the rest of the environment is &lt;em&gt;exactly&lt;/em&gt; the same (as much as possible) for all deployment stacks being tested i.e. same hardware, same software versions, same test application and same tester as well. :-)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use the right benchmarking tool that provides relevant and useful statistics.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Do not make it a "Hello world" application comparison that is potentially not useful in any which way in real world.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Allow each server stack to initialize/warm-up as required before running a performance test over it.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We selected &lt;a href="http://www.hpl.hp.com/research/linux/httperf/"&gt;httperf&lt;/a&gt; for conducting this experiment for it's ability to provide the relevant statistics. The data presented below should vouch for its usefulness.&lt;/p&gt;

&lt;p&gt;I would also recommend this &lt;a href="http://peepcode.com/products/benchmarking-with-httperf"&gt;PeepCode  screencast&lt;/a&gt; that provides a very good introduction to benchmarking with httperf. (Disclaimer - It's not free and we don't get any affiliate money referring it :-) )&lt;/p&gt;

&lt;h2&gt;Test Environment&lt;/h2&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;strong&gt;Server Machine&lt;/strong&gt;&lt;br /&gt;
CPU - Intel Core 2 Duo 2.8 GHz&lt;br /&gt;
RAM - 1GB&lt;br /&gt;
OS - Ubuntu 8.1(Intrepid) Desktop&lt;br /&gt;
Kernel - Linux 2.6.27-7-generic&lt;br /&gt;
Ruby - 1.8.7(2008-08-11 patchlevel 72)  (Ubuntu Package)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Client Machine&lt;/strong&gt;&lt;br /&gt;
CPU - Intel P-IV 2.66GHz&lt;br /&gt;
Memory - 1 GB&lt;br /&gt;
OS - Debian 5.0 (lenny)&lt;br /&gt;
Kernel - Linux 2.6.26-1-686  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Benchmarking Tool&lt;/strong&gt;&lt;br /&gt;
httperf -0.9.0 compiled without DEBUG  and without TIME_SYSCALLS  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Network Connectivity&lt;/strong&gt;&lt;br /&gt;
100 MBPS LAN (1 hop between two machines)  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Application&lt;/strong&gt;&lt;br /&gt;
Name: Instiki&lt;br /&gt;
Source: &lt;a href="http://github.com/parasew/instiki"&gt;http://github.com/parasew/instiki&lt;/a&gt;&lt;br /&gt;
Commit: 77dcb015f38d75d32df6fceb52ce4a2737845991&lt;br /&gt;
Rails Version: 2.3.4&lt;br /&gt;
Database: SQLite 3&lt;br /&gt;
&lt;strong&gt;&lt;em&gt;URL: /wiki/list&lt;/strong&gt;&lt;/em&gt;  &lt;/p&gt;

&lt;p&gt;We have tried to use a URL that has database interaction so as to simulate a typical scenario of a web application. This would ensure most  parts of the Rails stack are involved in the test. Please note that caching is not enabled at all for this URL.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deployment Stacks&lt;/strong&gt;&lt;br /&gt;
We chose the following servers for this comparison.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Apache 2.2.9 (mpm-prefork) (Ubuntu Default) + mod-proxy-balancer + Mongrel 1.1.5 Cluster (6)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Apache 2.2.9 (mpm-prefork) (Ubuntu Default) + Passenger 2.2.7 (MaxPoolSize = 6)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Apache 2.2.9 (mpm-prefork) (Ubuntu Default) + mod-proxy-balancer + Thin 1.2.5 Cluster (6)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;WebROaR v0.2.3 (Set 6 maximum workers for the deployed application)&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Since the focus of our test is to compare maximum requests/sec output by each of the stacks, and the specific request is being served out by Rails from the database, replacing Apache with Nginx should not give us too dramatically different results. (As I mentioned earlier, these tests are just indicative of what performance level you can &lt;em&gt;generally&lt;/em&gt; expect from your server.)&lt;/p&gt;

&lt;p&gt;We would be happy if someone can repeat the test with Nginx as well.&lt;/p&gt;

&lt;h2&gt;Procedure&lt;/h2&gt;

&lt;hr /&gt;

&lt;h2&gt;Strategy&lt;/h2&gt;

&lt;p&gt;We would like to find out the maximum requests/sec output by each server when the selected application URL is bombarded with requests from httperf. &lt;/p&gt;

&lt;p&gt;Consider this command:  &lt;/p&gt;

&lt;pre&gt;&lt;code&gt;httperf --hog --server ABC --num-conns 2000 --num-calls 10 --uri /wiki/list --rate 11
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;It tries to make 2000 connections to the server ABC and sends 10 requests through each, for the URL /wiki/list. The total number of requests made are 2000*10 = 20,000. The 'Demanded Request Rate' is the product of &lt;strong&gt;rate&lt;/strong&gt; and &lt;strong&gt;num-calls&lt;/strong&gt; parameters i.e. 11 * 10 = 110 requests/sec. &lt;/p&gt;

&lt;p&gt;The output would look similar to the following if the server is able to handle this load:  &lt;/p&gt;

&lt;pre&gt;&lt;code&gt;httperf --hog --client=0/1 --server=ABC --port=80 --uri=/wiki/list --rate=11 
--send-buffer=4096 --recv-buffer=16384 --num-conns=2000 --num-calls=10

Maximum connect burst length: 1

Total: connections 2000 requests 20000 replies 20000 test-duration 181.970 s

Connection rate: 11.0 conn/s (91.0 ms/conn, &amp;lt;=13 concurrent connections)
Connection time [ms]: min 107.4 avg 321.2 max 1724.8 median 238.5 stddev 228.1
Connection time [ms]: connect 0.2
Connection length [replies/conn]: 10.000

Request rate: 109.9 req/s (9.1 ms/req)
Request size [B]: 75.0

Reply rate [replies/s]: min 97.2 avg 109.9 max 117.4 stddev 4.0 (36 samples)
Reply time [ms]: response 31.8 transfer 0.3
Reply size [B]: header 465.0 content 4930.0 footer 0.0 (total 5395.0)
Reply status: 1xx=0 2xx=20000 3xx=0 4xx=0 5xx=0

CPU time [s]: user 29.39 system 151.45 (user 16.2% system 83.2% total 99.4%)
Net I/O: 587.1 KB/s (4.8*10^6 bps)

Errors: total 0 client-timo 0 socket-timo 0 connrefused 0 connreset 0
Errors: fd-unavail 0 addrunavail 0 ftab-full 0 other 0
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The important fields to look from the above result are:  &lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Reply rate [replies/s]: min 97.2 avg 109.9 max 117.4 stddev 4.0 (36 samples)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This tells us that average reply rate was 109.9 RPS with a standard deviation of 4. This was measured over 36 samples by httperf that samples every 5 seconds. (This specific test ran for 181.970 seconds). For the statistically inclined, Avg RPS +- 2*Std Deviation should give you 95% of the values.&lt;/p&gt;

&lt;p&gt;There were no errors reported.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Errors: total 0 client-timo 0 socket-timo 0 connrefused 0 connreset 0
Errors: fd-unavail 0 addrunavail 0 ftab-full 0 other 0
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;From this test we can conclude that the particular server under test can easily handle the demand rate of 110 RPS without any errors, and can be subject to more load.&lt;/p&gt;

&lt;p&gt;Our aim is to find the maximum avg reply rate output by each server when subject to a series of high demanded request rates. After a specific demanded request rate test has been done, the server is restarted and warmed up before running next higher demanded rate test.&lt;/p&gt;

&lt;p&gt;As we keep on increasing the demanded rate, the server would get saturated and its reply rate would not increase, and rather slowly start to degrade after a point. It could also start throwing errors. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;We would like to find the saturation point for each server and the maximum avg reply rate output at that point.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;Key Points&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;All possible additional applications/daemons should be stopped.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Rails environment should be set to production.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;At any given point of time only one server deployment should be active on the machine, and it should run only the rails application under test.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Set Analytics to 'Disabled' for the deployed rails application on WebROaR&lt;/strong&gt;. To ensure a fair comparison, we recommend turning off this feature to get the fastest performance for your application on WebROaR.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ensure each server is initialized and warmed-up properly for every test i.e. it has loaded all it's resources and in case of Passenger &amp;amp; WebROaR they have already instantiated it's maximum number of workers. We used the following command for warming up all server stacks before running each of their tests.&lt;/p&gt;

&lt;pre&gt;
&lt;code&gt;
httperf --hog --server ABC --num-conns 200 --num-calls 10 --uri /wiki/list 
--rate 20
&lt;/code&gt;
&lt;/pre&gt;    &lt;/li&gt;
&lt;li&gt;&lt;p&gt;After each test, the server should be shut down, and tmp folder, log files and sessions should be cleared.The commands that can be used are rake tmp:clear, rake db:sessions:clear and rake log:clear.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;To get the memory usage numbers for each server, we used this simple technique that I first saw on the &lt;a href="http://www.rubyenterpriseedition.com/comparisons.html"&gt;benchmarking blog&lt;/a&gt; of the good folks at Phusion Passenger. Essentially, just after the load test use the &lt;strong&gt;&lt;code&gt;free -m&lt;/code&gt;&lt;/strong&gt; command to see the free memory in the system, and then check it again after shutting down the server. The difference of these 2 numbers gives us the actual amount of memory the server stack was consuming. E.g. If  &lt;strong&gt;&lt;code&gt;free -m&lt;/code&gt;&lt;/strong&gt; reported 300 MB free after the test, and 550 MB when the server was shutdown, the total memory usage of the server was 550-300 = 250 MB.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Results&lt;/h2&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For this particular test, WebROaR is able to handle the maximum demanded request rate among all the deployment stacks. Even after it gets saturated its performance doesn't degrade and there are no errors. &lt;/li&gt;
&lt;li&gt;Passenger &amp;amp; Thin started giving errors, hence the graph software automatically got their reply rates to zero which is not statistically true, but emphasizes the point in a way.&lt;/li&gt;
&lt;li&gt;Mongrel also behaves nicely after saturation and doesn't throw any errors. &lt;/li&gt;
&lt;li&gt;Please note that Thin is able to handle the load very well before it breaks out at around 178. Its green line is merged with WebROaR's till that point and not visible in the image above.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;The maximum RPS numbers for each of the deployment stack are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Apache 2.2.9 + Passenger 2.2.7 (6) -  &lt;strong&gt;107.3&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Apache 2.2.9 + Mongrel 1.1.5 Cluster (6) - &lt;strong&gt;123.8&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Apache 2.2.9 + Thin 1.2.5 Cluster (6) - &lt;strong&gt;178.4&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;WebROaR 0.2.3 (6 maximum workers) -&lt;strong&gt;188.8&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As per this test, on an average WebROaR is   &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;~76% faster than Passenger&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;~52% faster than Mongrel&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;~6% faster than Thin&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Remember, this is just one &lt;em&gt;particular&lt;/em&gt; action of one &lt;em&gt;particular&lt;/em&gt; application. It is not wise to derive a conclusion for each and every application based on the above result. &lt;/p&gt;

&lt;p&gt;Let's look in to more details given to us by httperf.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;The above table has the detailed numbers for test run of each deployment stack where it performed at its best. (Avg RPS +- 2*SD) range gives us a good idea of the performance of the server for 95% of its samples. WebROaR has the smallest standard deviation of 1.5 giving us a good indicator of consistency in its performance across all requests.&lt;/p&gt;

&lt;p&gt;Also looking at the above table, we can safely say that for this test Network I/O was not a bottle neck at all. &lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Memory usage numbers for each of the deployment stack when they are delivering their maximum RPS are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Apache 2.2.9 + Passenger 2.2.7 (6) -  &lt;strong&gt;133 MB&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Apache 2.2.9 + Mongrel 1.1.5 Cluster (6) - &lt;strong&gt;368 MB&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Apache 2.2.9 + Thin 1.2.5 Cluster (6) - &lt;strong&gt;231 MB&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;WebROaR 0.2.3 (6 maximum workers) -&lt;strong&gt;258 MB&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For this test, Passenger consumed the least amount of memory followed by Thin. &lt;/p&gt;

&lt;h2&gt;More Performance Testing&lt;/h2&gt;

&lt;p&gt;We picked up 2 more open source Rails applications and tested them out using the above procedure. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Application&lt;/strong&gt;&lt;br /&gt;
Name: Redmine&lt;br /&gt;
Source: &lt;a href="http://github.com/edavis10/redmine"&gt;http://github.com/edavis10/redmine&lt;/a&gt;&lt;br /&gt;
Commit: c9bfdc009baf9aa472b82543fbb3189ff9862b48&lt;br /&gt;
Rails Version: 2.3.4&lt;br /&gt;
Database: MySQL 5.0.67-0ubuntu6&lt;br /&gt;
&lt;strong&gt;&lt;em&gt;URL: /projects&lt;/strong&gt;&lt;/em&gt;  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Application&lt;/strong&gt;&lt;br /&gt;
Name: El Dorado&lt;br /&gt;
Source: &lt;a href="http://github.com/trevorturk/eldorado"&gt;http://github.com/trevorturk/eldorado&lt;/a&gt;&lt;br /&gt;
Commit: eac99d4b3cdd95782c3bc8e0642c7e3b0380017a&lt;br /&gt;
Rails Version: 2.3.3&lt;br /&gt;
Database: MySQL 5.0.67-0ubuntu6&lt;br /&gt;
&lt;strong&gt;&lt;em&gt;URL: /users&lt;/strong&gt;&lt;/em&gt;  &lt;/p&gt;

&lt;p&gt;Here are the results:&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;As per the tests, on an average WebROaR is   &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;15 to 36%&lt;/strong&gt; faster for the tested Redmine URL&lt;br /&gt;
&lt;strong&gt;9 to 39%&lt;/strong&gt; faster for the tested El Dorado URL&lt;/p&gt;

&lt;p&gt;than other servers.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;The above memory usage graph indicates Passenger &amp;amp; WebROaR seem to be less memory hungry than the other 2 servers. (At least for these applications!)&lt;/p&gt;

&lt;h2&gt;More Performance Testing (with a different tool)&lt;/h2&gt;

&lt;p&gt;We also tested out the 3 applications (Instiki, Redmine and El Dorado) with 'ab'. In our opinion, 'httperf' is more reliable and provides more useful information, but we thought it would be a good idea to cross-check if 'ab' is giving similar (if not exact) results.&lt;/p&gt;

&lt;p&gt;The following command was used to 'warmup' the server stacks:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;ab -c20 -n2000 [Application URL]
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The actual test:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;ab -c20 -n20000 [Application URL]
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;The tests with 'ab' also confirmed the trends seen with 'httperf' and WebROaR does seem to be doing better than the other servers.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;The memory usage numbers again corroborated the earlier finding of Passenger and WebROaR being less memory hungry than other 2 servers.&lt;/p&gt;

&lt;p&gt;The complete set of raw results data can be downloaded from &lt;a href="/blog/assets/webroar.in/2009/11/25/benchmarks-v1.tar.gz"&gt;here&lt;/a&gt;. &lt;/p&gt;

&lt;h2&gt;Conclusion&lt;/h2&gt;

&lt;hr /&gt;

&lt;p&gt;How much should one really read in to the numbers above? Does WebROaR beat all other deployment stacks &lt;em&gt;every time&lt;/em&gt; by these margins?&lt;/p&gt;

&lt;p&gt;Well, we would suggest taking these numbers as &lt;strong&gt;indicative&lt;/strong&gt; of how &lt;strong&gt;&lt;em&gt;your&lt;/strong&gt;&lt;/em&gt; application might perform on WebROaR. You may or may not see these exact gains (could be higher or lower), but you can safely assume that &lt;strong&gt;mostly&lt;/strong&gt; there would be some decent gain performance of your application if it runs on WebROaR.&lt;/p&gt;

&lt;p&gt;Apart from performance, we believe WebROaR brings a whole lot of simplicity and an integrated solution for Ruby on Rails™ application deployment. Do check it out and run your application on it when you have some time!&lt;/p&gt;

&lt;p&gt;We would be happy to receive your feedback/comments/suggestions on this article.&lt;/p&gt;
          &lt;img src="http://feeds.feedburner.com/~r/WebROaR-RubyApplicationServer-Blog/~4/SAiMWoipd9g" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://webroar.in/blog/2009/11/25/comparison-of-rails-deployment-stacks-2</feedburner:origLink></entry>
  <entry xml:base="http://webroar.in/blog/">
    <author>
      <name>Aditya Babbar</name>
    </author>
    <id>tag:webroar.in,2009-11-25:9</id>
    <published>2009-11-25T22:03:00Z</published>
    <updated>2010-02-23T18:11:58Z</updated>
    <category term="Releases" />
    <link href="http://feedproxy.google.com/~r/WebROaR-RubyApplicationServer-Blog/~3/rrArCcF3yTE/introducing-webroar-v0-2-3-ruby-application-server" rel="alternate" type="text/html" />
    <title>Introducing WebROaR v0.2.3: Ruby Application Server</title>
<summary type="html">&lt;p&gt;We are happy to announce the first public open source release of 'WebROaR - Ruby Application Server'. This product is available for free use under GPL v3.&lt;/p&gt;

&lt;p&gt;WebROaR aims to make the deployment of Ruby on Rails™ applications &lt;em&gt;more&lt;/em&gt; simple, and provide an integrated solution to monitor the performance of the application and track its exceptions. This is facilitated by a simple and easy to use admin panel of the server. &lt;/p&gt;

&lt;p&gt;It also is the best performing server as per "&lt;em&gt;our&lt;/em&gt;" &lt;a href="/blog/2009/11/25/comparison-of-rails-deployment-stacks-2"&gt;benchmarks&lt;/a&gt;. We absolutely encourage you to perform your own tests and then arrive at a conclusion. :-)&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;We are happy to announce the first public open source release of 'WebROaR - Ruby Application Server'. This product is available for free use under GPL v3.&lt;/p&gt;

&lt;p&gt;WebROaR aims to make the deployment of Ruby on Rails™ applications &lt;em&gt;more&lt;/em&gt; simple, and provide an integrated solution to monitor the performance of the application and track its exceptions. This is facilitated by a simple and easy to use admin panel of the server. &lt;/p&gt;

&lt;p&gt;It also is the best performing server as per "&lt;em&gt;our&lt;/em&gt;" &lt;a href="/blog/2009/11/25/comparison-of-rails-deployment-stacks-2"&gt;benchmarks&lt;/a&gt;. We absolutely encourage you to perform your own tests and then arrive at a conclusion. :-)&lt;/p&gt;
&lt;h2&gt;Features&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Simplified Deployment for Ruby on Rails™ as well as other Rack compliant applications&lt;/li&gt;
&lt;li&gt;Beats all other deployment stacks in benchmarks&lt;/li&gt;
&lt;li&gt;Runs multiple applications simultaneously&lt;/li&gt;
&lt;li&gt;Implements HTTP/1.1 grammar as per RFC 2616 including support for persistent, and chunked requests&lt;/li&gt;
&lt;li&gt;Provides run time performance data for the deployed applications&lt;/li&gt;
&lt;li&gt;Generates notifications in case any exceptions occur in any of the deployed applications&lt;/li&gt;
&lt;li&gt;Intelligent load balancing and dynamic reaping of stuck Ruby processing instances&lt;/li&gt;
&lt;li&gt;SSL support&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Server Internals&lt;/h2&gt;

&lt;p&gt;I am sure some of you would be keen to know about the design of the server. Here is a primer:&lt;/p&gt;

&lt;p&gt;WebROaR has a head process that accepts connections, parses the HTTP request, and passes it to the appropriate worker process (that has the corresponding Ruby Web Application code loaded in it). Head and worker are both written in C, and use the terrific &lt;a href="http://software.schmorp.de/pkg/libev.html"&gt;libev&lt;/a&gt; event loop for all the asynchronous and non-blocking socket communication with each other as well as the clients. The server smartly manages its pool of worker processes for each deployed application based on the request load. (For each deployed application, both minimum and maximum number of worker processes limits can be configured.)&lt;/p&gt;

&lt;p&gt;Obviously, rather than writing HTTP handler on our own, we decided to use the brilliant &lt;a href="http://tinyclouds.org/libebb/"&gt;libebb&lt;/a&gt; library that implements HTTP/1.1 grammar as per RFC 2616 including support for persistent, and chunked requests. Libebb’s HTTP Parser itself was inspired by Mongrel’s awesome Ragel based parser. (Beauty of open source software, one inspires the other and all of them keep getting better.)&lt;/p&gt;

&lt;p&gt;Worker loads up (aka embeds) the Ruby interpreter, the web framework and the application code in it. In case any exception occurs while processing a request or if analytics have been enabled for that application, the worker process dispatches a message packet to Starling Message Queue.&lt;/p&gt;

&lt;p&gt;WebROaR Analyzer daemon takes its own sweet time to dequeue messages, analyze them and stores the required data to a database.&lt;/p&gt;

&lt;p&gt;A nice and simple Admin Panel Rails application running in one of the workers itself, helps in easy UI driven deployment. It also shows all the run time numbers stored in the database in a variety of useful views, along with the list of exceptions that occur in the deployed applications.&lt;/p&gt;

&lt;p&gt;All the server processes talk to each other (whenever required) using SCGI.&lt;/p&gt;

&lt;p&gt;Overall, we have used C for asynchronous network communication stuff, and Ruby to write the more fancy things quickly.&lt;/p&gt;

&lt;h2&gt;Roadmap&lt;/h2&gt;

&lt;p&gt;Of course the first and foremost thing is to see how the server fares for all the Rails applications out there in the wild. We have tested it with our internal/customer applications and a number of open source ones. But obviously as more apps are (hopefully) run on it, and encountered issues are fixed, we hope the server would become more stable and robust.&lt;/p&gt;

&lt;p&gt;As far as new features go, we have a few things on top of our mind but would be keen to hear from the community on how we can improve this product and make it more useful.&lt;/p&gt;

&lt;h2&gt;Finally ...&lt;/h2&gt;

&lt;p&gt;If you have some time, please do give it a spin and see how your Rails application performs on WebROaR. You can refer the install instructions on the &lt;a href="http://webroar.in"&gt;site home page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We would look forward to your comments/feedback.&lt;/p&gt;
          &lt;img src="http://feeds.feedburner.com/~r/WebROaR-RubyApplicationServer-Blog/~4/rrArCcF3yTE" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://webroar.in/blog/2009/11/25/introducing-webroar-v0-2-3-ruby-application-server</feedburner:origLink></entry>
</feed>

