Passenger + Ruby dev környezethez

Apró ötlet: elegem volt a script/server típusú szerverindítgatásból, ami ráadásul “csúnya” megoldás, mert nem magától fut, külön minden projekthez egy StartupItemet gyártani (OSX) nem túl esztétikus megoldás. Keresgélés után végül a Passenger mellett döntöttem, egyszerű telepíteni, gyorsan összetracskolható az Apache-csal. Ugyanakkor ha Rails-es projekt fejlesztése közben az initializer-ekkel kell dolgozni, macerássá válik: a Passenger a szerver indításakor felnyalja az environment.rb-t és - bár más fájlok változását észreveszi - pont az initializereket nem lehet módosítani emiatt. (Illetve nyilván lehet, csak újra kell indítani hozzá a szervert, így meg oda az elegáns, állandó újraindítgatástól mentes munka.)

Nem teljesen kézenfekvő ugyan, és a problémával is kevesen foglalkoznak, de a dokumentációból tkp. összerakható a megoldás.

<VirtualHost *>
    ServerName projekt1
    DocumentRoot /sites/projekt1
    RailsEnv development
    RailsSpawnMethod conservative
    PassengerMaxRequests 1
</VirtualHost>

RailsEnv nem létszükséglet, de mindenhol javasolják, hogy konkrétan állítsuk be development módra - még nem tudom, hogy ez befolyásolja-e a Passenger viselkedését. PassengerMaxRequests 1 - ettől a Passenger az adott app instance-ét kiüti a kiszolgált request után. Nem a legelegánsabb megoldás, de automatikus újraindítást jelent, ergo initializeres tesztelős-tracskolós időkben enyhíti a lelki bajokat. RailsSpawnMethod conservative - amíg smart-lv2 vagy smart módban volt a szerver, a becache-elt framework kód (aminek ezek szerint része az initializers is) nem volt hajlandó “kiürülni”. Conservative módban nincs gyorstárazás, restartkor újratöltődik minden, amit szeretnénk, ellenben minden lassabb lesz: a reload miatt oldalbetöltődésenként mondjuk 3-4 sec is eltelhet.