<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Jaros&#322;aw Zabie&#322;&#322;o - BLOG: Tag mod_rails</title>
    <link>http://blog.zabiello.com/articles/tag/mod_rails</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>moje notatki, linki, komentarze</description>
    <item>
      <title>Sprz&#261;tanie po PHP czyli Passenger 2.0 i Ruby Enterprise 1.0</title>
      <description>&lt;p&gt;Sta&#322;o si&#281;! &lt;a href="http://www.phusion.nl/"&gt;Tw&#243;rcy&lt;/a&gt; &#347;wietnego modu&#322;u Apache&amp;#8217;a &amp;#8211; &lt;a href="http://www.modrails.com/"&gt;mod_rails&lt;/a&gt; &amp;#8211; zmieniaj&#261; jego nazw&#281; na &lt;strong&gt;mod_passenger&lt;/strong&gt;, bo mod_rails nie jest ju&#380; wi&#281;cej modu&#322;em tylko dla &lt;a href="http://rubyonrails.pl"&gt;Rails&lt;/a&gt;. W nowej wersji 2.0 (ktora ma wyj&#347;&#263;&#160;&lt;a href="http://groups.google.com/group/phusion-passenger/browse_thread/thread/a2b63650c1b9394"&gt;na dniach&lt;/a&gt;) dodano pe&#322;ne wsparcie dla &lt;a href="http://blog.zabiello.com/articles/2008/03/04/frameworki-rubiego-rack-wsgi"&gt;Rack&lt;/a&gt; i tym samym mod_passenger 2.0 obs&#322;uguje wszystkie pozosta&#322;e frameworki u&#380;ywaj&#261;ce Rack&amp;#8217;a (ze &#347;wietnym &lt;a href="http://merbivore.com"&gt;Merbem&lt;/a&gt; w&#322;&#261;cznie).&lt;/p&gt;


	&lt;p&gt;Drugim, ciekawym projektem firmy &lt;a href="http://www.phusion.nl/"&gt;Phusion&lt;/a&gt; jest &lt;a href="http://www.rubyenterpriseedition.com/"&gt;Ruby Enterprise&lt;/a&gt; (wersja 1.0 ma by&#263; dost&#281;pna lada dzie&#324; razem z Passenger 2.0). Jest to podrasowana wersja interpretera Rubiego (MRI) powoduj&#261;ca nie tylko przy&#347;pieszenie ale tak&#380;e znaczne zmniejszenie zu&#380;ycia pami&#281;ci &lt;span class="caps"&gt;RAM&lt;/span&gt; (dodano technik&#281; copy-on-write do garbage collectora interpretera &lt;span class="caps"&gt;MRI&lt;/span&gt;, dok&#322;adniej opisano to na &lt;a href="https://dl.getdropbox.com/u/26205/railsconf.pdf"&gt;slajdach&lt;/a&gt;). Wg tego co twierdz&#261; ludzie z Phusion, uzyskano zmniejszenie o 33% zu&#380;ycia pami&#281;ci przez Rails. To bardzo dobra wiadomo&#347;&#263;, bo pami&#281;&#263; mimo, &#380;e jest generalnie tania, nie jest tania w ofertach hostingowych &lt;span class="caps"&gt;VPS&lt;/span&gt;.&lt;/p&gt;


	&lt;p&gt;Passenger wprowadza now&#261; jako&#347;&#263; dla framework&#243;w Rubiego. Coraz wi&#281;cej firm hostingowych to docenia i przechodzi na Passenger&amp;#8217;a (z tych bardziej znanych, &lt;a href="http://blog.dreamhost.com/2008/05/13/passenger-for-ruby-on-rails/"&gt;Dreamhost ju&#380; tego u&#380;ywa&lt;/a&gt;). Sam modu&#322;&#160;mod_passenger jest nie tylko trywialny w u&#380;yciu, jest te&#380; bardzo szybki i stabilny. Chyba nadchodz&#261; ci&#281;&#380;kie chwile dla tych, co trzymali si&#281; &lt;span class="caps"&gt;PHP&lt;/span&gt; g&#322;&#243;wnie z powodu jego taniego hostingu i prostoty uruchomiania serwerze. Rails i Merb mog&#261; wkr&#243;tce troch&#281; pozamiata&#263; po &lt;span class="caps"&gt;PHP&lt;/span&gt;. :)&lt;/p&gt;


	&lt;p&gt;Szybko&#347;&#263; mod_passenger&amp;#8217;a robi wra&#380;enie. Bije wydajno&#347;ci&#261; kombinacj&#281; &lt;a href="http://nginx.net/"&gt;Nginx&lt;/a&gt; + asynchroniczny &lt;a href="http://code.macournoyer.com/thin/"&gt;Thin&lt;/a&gt; u&#380;ywaj&#261;cy szybkich, uniksowych socket&#243;w. Jest te&#380; szybszy od komercyjnego &lt;a href="http://litespeedtech.com/"&gt;Litespeed&amp;#8217;a&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;&lt;img src="http://blog.zabiello.com/images/passenger_vs_thin.png" alt="" /&gt;&lt;/p&gt;


	&lt;p&gt;&lt;img src="http://blog.zabiello.com/images/passenger_vs_litespeed.png" alt="" /&gt;&lt;/p&gt;


	&lt;p&gt;Co ciekawe, mod_passenger obs&#322;uguje interfejs &lt;strong&gt;&lt;span class="caps"&gt;WSGI&lt;/span&gt; do Pythona&lt;/strong&gt;! Jeden modu&#322; pozwoli wi&#281;c na odpalanie Rails, Merb&amp;#8217;a i Django r&#243;wnocze&#347;nie. Ma&#322;o tego, je&#347;li mod_passenger dla Pythona b&#281;dzie dzia&#322;a&#322; tak sprawnie jak dla Rails, to b&#281;dziemy mie&#263; trywialne prze&#322;adowywanie aplikacji Django bez konieczno&#347;ci restartu ca&#322;ego Apache&amp;#8217;a.&lt;/p&gt;


	&lt;p&gt;Vide:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://www.railsjedi.com/posts/52-The-Holy-Grail-for-Rails-Deployment"&gt;The Holy Grail for Rails Deployment&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;


	&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://www.rubyinside.com/28_mod_rails_and_passenger_resources-899.html"&gt;28 mod_rails / Passenger Resources To Help You Deploy Rails Applications Faster&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;


	&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://github.com/FooBarWidget/passenger/tree/master"&gt;Passenger 2.0 na GitHub.com&lt;/a&gt; dla tych, co chc&#261; ju&#380; teraz zainstalowa&#263; mod_passenger 2.0 (ja ju&#380; to zainstalowa&#322;em)&lt;/li&gt;
	&lt;/ul&gt;


	&lt;h3&gt;Update&lt;/h3&gt;


	&lt;p&gt;&lt;em&gt;2008-06-25&lt;/em&gt;&lt;/p&gt;


&lt;object width="400" height="225"&gt;    &lt;param name="allowfullscreen" value="true" /&gt;    &lt;param name="allowscriptaccess" value="always" /&gt;    &lt;param name="movie" value="http://www.vimeo.com/moogaloop.swf?clip_id=1198020&amp;amp;server=www.vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" /&gt;    &lt;embed src="http://www.vimeo.com/moogaloop.swf?clip_id=1198020&amp;amp;server=www.vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="225"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;a href="http://www.vimeo.com/1198020?pg=embed&amp;#38;sec=1198020"&gt;Phusion Passenger 2.0 and Ruby Enterprise Edition&lt;/a&gt; from &lt;a href="http://www.vimeo.com/user519957?pg=embed&amp;#38;sec=1198020"&gt;Carl Youngblood&lt;/a&gt; on &lt;a href="http://vimeo.com?pg=embed&amp;#38;sec=1198020"&gt;Vimeo&lt;/a&gt;

	&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://blog.dmilith.pl/2008/06/25/ruby-enterprise-edition-32bit-na-debianie-etch-64bit"&gt;Ruby Enterprise Edition 32bit na debianie etch 64bit?&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;</description>
      <pubDate>Wed, 04 Jun 2008 01:40:00 +0200</pubDate>
      <guid isPermaLink="false">urn:uuid:77d6b3df-2b86-4365-b5de-d4fd9b153ecc</guid>
      <author>Jaros&#322;aw Zabie&#322;&#322;o</author>
      <link>http://blog.zabiello.com/articles/2008/06/04/passenger2-ruby-enterprise</link>
      <category>mod_rails</category>
      <category>ruby</category>
      <category>rails</category>
      <category>merb</category>
      <category>rack</category>
      <category>apache</category>
      <category>php</category>
      <category>django</category>
      <category>python</category>
    </item>
    <item>
      <title>Passenger mod_rails</title>
      <description>&lt;p&gt;Cho&#263; sam &lt;a href="http://rubyonrails.pl"&gt;Rails&lt;/a&gt; jest intuicyjny i prosty w u&#380;yciu, to ju&#380; spos&#243;b u&#380;ycia go na serwerze produkcyjnym (gdzie liczy si&#281; g&#322;&#243;wnie szybko&#347;&#263;&#160;i stabilno&#347;&#263;) nie jest takie oczywiste z powodu istnienia wielu, alternatywnych rozwi&#261;za&#324;. Powsta&#322;y niedawno modu&#322; dla Apache &amp;#8211; &lt;a href="http://www.modrails.com"&gt;mod_rails&lt;/a&gt; &amp;#8211; mo&#380;e wszystko zmieni&#263;. Dzi&#281;ki niemu uruchomienie Rails na serwerze staje si&#281;&#160;praktycznie tak samo trywialne jak w przypadku &lt;span class="caps"&gt;PHP&lt;/span&gt; i modu&#322;u mod_php!&lt;/p&gt;


	&lt;p&gt;Musz&#281; przyzna&#263;, &#380;e pocz&#261;tkowo by&#322;em dosy&#263; sceptycznie nastawiony do pomys&#322;u mod_rails. Przede wszystkim, dziwnym wydawa&#322;o si&#281; tworzy&#263; modu&#322; do Apache&amp;#8217;a dla frameworka, czyli w sumie aplikacji, a nie dla samego j&#281;zyka Ruby. Niestety, istniej&#261;cy od jakiego&#347; czasu mod_ruby by&#322; niedopracowany i krytykowany do tego stopnia &#380;e u&#380;ycie go do Rails jest po prostu niezalecane. Dlatego od samego pocz&#261;tku, gdy pojawi&#322; si&#281; Rails, promowano inne rozwi&#261;zanie (oparte na FastCGI). Pierwsze wydanie &amp;#8220;Agile Web Development with Rails&amp;#8221; jeszcze to promowa&#322;o. W drugim wydaniu (wydanym r&#243;wnie&#380; &lt;a href="http://helion.pl/ksiazki/agilep.htm"&gt;po polsku&lt;/a&gt;) autorzy przyznali &#380;e to rozwi&#261;zanie nie by&#322;o wolne od szerego problem&#243;w. Na szcz&#281;&#347;cie pojawi&#322; si&#281; Mongrel i bardzo szybko kombinacja szybkiego serwera &lt;span class="caps"&gt;HTTP&lt;/span&gt; z przodu + load balancing do klastera z mongreli sta&#322;a si&#281; g&#322;&#243;wn&#261; metod&#261; u&#380;ywania Rails na serwerze produkcyjnym. I cho&#263; p&#243;&#378;niej pojawi&#322;y si&#281; jeszcze rozwi&#261;zania asynchroniczne (Swiftiply i evented_mongrel, Thin, Ebb), to  zasadniczo niewiele wnosi&#322;y do rozwi&#261;zania standardowego poza troch&#281;&#160;wi&#281;ksz&#261; szybko&#347;ci&#261; i innym (w&#322;a&#347;nie asynchronicznym) typem pracy.&lt;/p&gt;


	&lt;p&gt;Do tej pory sympatycy Ruby on Rails troch&#281; sm&#281;tnie pogl&#261;dali na prostot&#281; uruchamiania aplikacji &amp;#8220;tego paskudnego pehapa&amp;#8221; za pomoc&#261; modu&#322;u mod_php. To dzi&#281;ki niemu &lt;span class="caps"&gt;PHP&lt;/span&gt; zdoby&#322; swoj&#261; popularno&#347;&#263;. Stworzenie prostej strony webowej sta&#322;o si&#281; banalnie proste i nie wymaga&#322;o dodatkowej wiedzy o load balancingu, ustawianiu buforowania, sposobie restartu klastera mongreli itp. Po prostu wrzucam plik i dzia&#322;a. Nawet sam &lt;span class="caps"&gt;DHH&lt;/span&gt; &lt;a href="http://www.loudthinking.com/posts/23-the-immediacy-of-php"&gt;zacz&#261;&#322; ostatnio wzdycha&#263;&lt;/a&gt; za tak&#261; prostot&#261; uruchamiania aplikacji.&lt;/p&gt;


	&lt;p&gt;Stworzony mod_rails ma ambicj&#281; aby uruchomienie Rails&#243;w by&#322;o tak proste jak to tylko mo&#380;liwe. Z tego co mog&#322;em sprawdzi&#263;, faktycznie dzia&#322;a to &#347;wietnie. Praktycznie nie jest wymagana &#380;adna konfiguracja. Wystarczy raz ustawi&#263; Apache&amp;#8217;a i mo&#380;na skupi&#263; si&#281; na budowaniu aplikacji. Domy&#347;lnie mod_rails uruchamia Rails w trybie produkcyjnym wi&#281;c zmiana kodu wymaga prze&#322;adowanie aplikacji. Jednak&#380;e ca&#322;a taka operacja sprowadza si&#281; do stworzenia pustego pliku &lt;code&gt;restart.txt&lt;/code&gt; w podkatalogu tmp. Gdy Apache znajdzie taki plik, b&#322;yskawicznie prze&#322;adowuje pliki Rubiego i usuwa plik. Nie trzeba te&#380; zastanawia&#263; si&#281; jak wyklucz&#261;&#263;&#160;przetwarzanie plik&#243;w statycznych i tworzonych przez mechanizm cache w RoR, mod_rails robi to automatycznie. Do tego zapewniona jest tak&#380;e &#322;adna obs&#322;uga b&#322;&#281;d&#243;w. Po prostu wygl&#261;da to rewelacyjnie.&lt;/p&gt;


	&lt;p&gt;Jak z wydajno&#347;ci&#261;? Jest ca&#322;kiem nie&#378;le. Autorzy twierdz&#261;, &#380;e mod_rails jest troch&#281; szybszy od thin&amp;#8217;a. Mnie wysz&#322;o troch&#281; odwrotnie, ale te&#380; nie robi&#322;em zbyt drobiazgowych por&#243;wna&#324;. Nawet je&#347;li klaster serwer&#243;w thin czy ebb pracuje troch&#281; wydajniej, to pokusa prostoty i wygody u&#380;ycia mod_rails jest trudna do odparcia. Szkoda tylko, &#380;e mod_rails, jak sama nazwa wskazuje, pracuje tylko z Ruby on Rails. Dobrze by by&#322;o, &#380;eby p&#243;&#378;niej powsta&#322;a podobna obs&#322;uga dla &lt;a href="http://merbivore.com/"&gt;Merb&amp;#8217;a&lt;/a&gt; (Cho&#263; Rails si&#281; tak&#380;e rozwija, Merb wci&#261;&#380; go mocno wyprzedza wydajno&#347;ciowo. Tak z prostych test&#243;w mi wysz&#322;o, &#380;e potrafi by&#263; szybszy nawet 2-3 razy). Nie mo&#380;na jednak autorom mod_rails mie&#263; przecie&#380; za z&#322;e, &#380;e po&#347;wi&#281;cili si&#281; najpopularniejszemu frameworkowi.&lt;/p&gt;


	&lt;p&gt;Passenger mod_rails to nie ostatnie s&#322;owo w sprawie deployingu Rails&#243;w. Podobn&#261; prostot&#261; charakteryzuje si&#281; JRuby on Rails, ale o tym nast&#281;pnym razem.&lt;/p&gt;</description>
      <pubDate>Sat, 19 Apr 2008 05:31:00 +0200</pubDate>
      <guid isPermaLink="false">urn:uuid:9896a167-4e71-4fe5-863a-aa17527bc110</guid>
      <author>Jaros&#322;aw Zabie&#322;&#322;o</author>
      <link>http://blog.zabiello.com/articles/2008/04/19/passenger-mod_rails</link>
      <category>mod_rails</category>
      <category>ruby</category>
      <category>rails</category>
      <category>apache</category>
    </item>
  </channel>
</rss>
