Switchpipe - cluster manager
Switchpipe je Ruby script (26K) pro spouštění web applikací. Funguje jako proxy mezi http serverem a aplikacema v Rails, Merb, Camping, atd.
Jeho výhoda je v snadné konfiguraci. Např. tento blog má nastavenou konfiguraci jenž se uvádí v YAML soubor a to takhle:
path: /var/www/vhosts/csonrails.net
type: mongrel_rails
max_instances: 2
timeout: 300
user: www-data
group: www-data
Co je lehce vyčíst. Je to mongrel_rails (možno použít i thin), budou se spouštět maximálně dvě instance a pokud nějaká běží víc jak pět minut bez requestu na ní, tak bude zabita. Pomocí volby cmd je možné nastavit libovolný vlastní proces. Další parametry jako user a group se už předávají samotnému spoštěčů, který pak vypadá, tak že má parametry:
mongrel_rails ... --user [[USER]] --group [[GROUP]] ...
Výhoda je, že ne všechny aplikace se používají tak často aby běželi pořád a timeout u FastCGI docela nefunguje správně, takže je v průměru více paměti což je dobrý pro různý cache, čí databázové enginy.
Posted in Konfigurace | no comments |
Použití MemCache jako úložiště pro sessions
Railsy umí používat pro ukládání sessions různá uložiště, přičemž ve výchozím nastavení používá PStore, jenž je implicitním úložištěm, se kterým pracuje CGI::Session. To jsou ty malé soubory v adresáři tmp/sessions, které vlastně obsahují serializované proměnné, které jsou v danou dobu v konkrétní session uloženy. Dále je pak možné použít uložení těchto sessions do databáze (přes ActiveRecord) nebo taky přímo do obsahu cookie (CookieStore), což zvyšuje o něco traffic, ale na druhou stranu nejsou nutné dodateční pomalé IO operace.
Zajímavou možnosti je použití operační paměti přes speciální server memcached. Ten byl původně vyvinut pro zvládnutí zátěže na LiveJournal.com a dnes je k dispozici téměř na všech známých platformách. Na straně Ruby je potřeba gem memcache-client, který dokonce umí používat několik serverů zároveň. Protože všechny data jsou ukládany v páru klíč - hodnota, tak pomocí hashovací funkce dokáže rozhodit jednotlivé klíče (a samozřejmě jejich data) na více serverů. Jako úložiště je možné memcache použít i pro ukládání stránek, což může hodně pomoct odlehčit nápor na databázový server.
Zavedení pro ukládání sessions se děje obvykle v souboru environments/production.rb, který konfiguruje aplikaci v produkčním režimu. K tomu stačí vyrobit MemCache objekt a spolu se specifikací expirace ho napojit na ActionController:
CACHE = MemCache.new 'localhost:11211',
:namespace => "myapp-#{RAILS_ENV}"
ActionController::Base.session_options[:expires] = 1800
ActionController::Base.session_options[:cache] = CACHE
Samozřejmě v tomto případě musí na localhostu běžet memcache daemon na svém výchozím portu 11211. V případě, že nějaká masívně využívaná aplikace, resp. hodně navštěvovaný web běží v clusteru na více serverech, tak je logicky nutné vyhradit jeden nebo více serverů, kde bude běžet memcached daemon a na něj, resp. na ně nasměrovat všechny instance aplikace/webu.
Bohužel, v čase psaní v aktuální verzi Rails (1.2.5) je menší chyba, který způsobuje podivné chování při nasazení memcache úložiště v prostředí clusterů. Je nutné aplikovat tuhle opravu, která už bude zahrnutá do dalších verzí, je možné že to už bude přímo Rails 2.0
Posted in Konfigurace | no comments |
Aplikace na relativní URL
Pokud je potřeba provozovat aplikaci na nějaké relatívní linkce, např. /other_url tak stačí nastavit pro AbstractRequest jeho atribut relative_url_root a to nejlíp tam kde to běží na produkci, tzn. do souboru config/environments/production.rb:
ActionController::AbstractRequest.relative_url_root = "/other_url"
Probnější popis můžete nalézt na John's Tidbits blogu. Hodí se to zejména pokud více aplikací musí běžet na stejném hostname, zvláště příhodné pro zabezpečené https spojení (pokud tedy nemáte rovnou wildcard certifikát).
Posted in Konfigurace | no comments |
RMagic a FreeBSD
Pro práci s obrázky v Ruby používám RMagick a jsem s ním velice spokojen. Bohužel ne vždy je jednoduché tuto komponentu dobře nainstalovat. Ve firmě pro kterou většinou pracuji se používá na serverech FreeBSD. Jedna z mých nejoblíbenějších platforem. :-) Bohužel tak jako na každém systému se i ve FreeBSD vyskytují chyby. Muj problém spočíval v tom, že jsem se pokusil nainstalovat RMagick jako port, ale po kompilaci a instalaci mi RMagick, stále zhazoval moje Rails aplikace. Příčina problému byla ve špatném portu, který není správně nastaven a špatně kompiluje ImageMagick port. Proto nejdříve stáhněte aktuální porty:
# cvsup -L 2 -h cvsup.freebsd.org /usr/share/examples/cvsup/ports-supfile
Potom zkompilujte ImageMagick s jeho závislostmi:
# cd /usr/ports/graphics/ImageMagick
# make; make install
A v neposlední řadě RMagick:
# cd /usr/ports/graphics/ruby-rmagick
# make; make install
Teď by mělo všechno správně fungovat.
Posted in Konfigurace | no comments |