home about us blogs contacts

Archive for the ‘ruby’ Category

Fast scalability of Ruby on Rails with mongrel under OpenBSD

Wednesday, August 12th, 2009


Everybody who works with ruby on rails more then month knows at least 2 things:
it’s great framework, but can’t handle multiple requests simultaneously due to it still doesn’t use threads.

fast start

As scalability is common issue, rubyonrails site wiki provides full set of solutions:

But we as fast solution will use great OpenBSD pf (Packet Filter) that capable to do many cool things.
First issue is standard mongrail cluster that can start several instances of mongrail can only create them on one IP with different ports, and pf can’t distribute requests among different ports on same IP.

Here we can create 2 simple scripts that start and destroy server instances:
# cat start.sh

for ip in
mongrel_rails start -e production -d --user myapp --group myapp --chdir /var/www/railsdocs/myapp \
--address ${ip} \
--pid /var/www/railsdocs/myapp/tmp/pids/mongrel.${count}.pid \
--log /var/www/railsdocs/myapp/log/mongrel.${count}.log

count=$(($count + 1))

# cat stop.sh

for instance in {1..5}
mongrel_rails stop --wait 3 --chdir /var/www/railsdocs/myapp \
--pid /var/www/railsdocs/myapp/tmp/pids/mongrel.${instance}.pid

And we need to enable pf:

#pflogd_flags=                   # add more flags, ie. "-s 256"

add one string to configuration file for load distribution:

rdr pass log on re0 proto tcp from any to SOME_IP port 80 ->
{,,,, } port 3000 round-robin

check work with:
# pfctl -s nat

monitor with:
tcpdump -n -e -ttt -i pflog0

for more info on pf:
man pf.conf (especially ‘TRANSLATION’ and ‘POOL OPTIONS’ sections)

Then when you see you need more advanced solution for load distribution you can install haproxy.
Check it with [http://www.openbsd.org/4.5_packages/i386/haproxy-]

RubyConf2008 conference

Tuesday, January 6th, 2009

If you are real Ruby follower you surely know about RubyConf2008 conference that was held in November 2008, or perhaps you even participated. If you still miss all the fun you can go thru whole list of videos from that conference on [http://rubyconf2008.confreaks.com/].

Or at least you can watch videos I’ve selected for busiest men:

name: Reasons behind Ruby
duration: 31 minutes
description: introductory speech from Yukihiro Matsumoto, father of Ruby where he speaks about Ruby, its future, and community in general without any technical stuff.
URL: [http://rubyconf2008.confreaks.com/matzs-keynote.html]

name: Fork Ruby
duration: 48 minutes
description: speech from Dave Thomas that helped write Agile Manifesto, and Programming Ruby: A Pragmatic Programmer’s Guide. He share thoughts about possible ideas for Ruby language and its development.
URL: [http://rubyconf2008.confreaks.com/keynote.html]

name: Ruby 1.9: What to Expect
duration: 50 minutes
description: Dave Thomas and David Black author of popular book Ruby for Rails, Ruby core contributor and the creator and maintainer of RCRchive show to us differences between Rubys with 2 irb windows step by step.
URL: [http://rubyconf2008.confreaks.com/ruby-19-what-to-expect.html]

name: Recovering from Enterprise
duration: 45 minutes
description: Comparison between Ruby and Java worlds from Ruby, and Ruby on Rails contributer Jamis Buck. He describe fundamental differences between Java and Ruby and his mistakes, and ways to avoid them. Also provide ideas how to write in real Ruby and not in Java with Ruby syntax.
URL: [http://rubyconf2008.confreaks.com/recovering-from-enterprise.html]

Next conference will be held on 13-14 March of 2009 in Salt Lake City.
See details on official site: [http://mtnwestrubyconf.org/]

Setup of Ruby on Rails environment under Debian GNU/Linux

Wednesday, May 21st, 2008


here you will find just quick-and-dirty hints how to use Ruby on Rails on Debian GNU/Linux platform

ruby and RoR installation

# apt-get install ruby

install ruby gems [http://en.wikipedia.org/wiki/RubyGems]
# apt-get install rubygems

then don’t use ‘rails’ Debian package because it doesn’t work with gem and so gem will not know about it.
you should use gems for that:
# gem install rails –include-dependencies

if you located behind a firewall, export following value before gem using:

if you use some IDE like NetBeans [http://en.wikipedia.org/wiki/NetBeans]with Ruby on Rails extension than after installing of ruby and rubygems packages
you can use NetBeans to install ruby extensions

installation of gems that require building of native extensions

some gems are simple set of ruby scripts and then can be just installed
some gems contain source code c/c++ and so before installing of such gems you should have:

**development environment
# apt-get install build-essential

**ruby development header files
# apt-get install ruby-dev

**header files of library that you want to build

for example: you want to have ruby driver for postgresql DB
# apt-get install postgresql-server-dev-8.3
# gem install postgres

enjoy it ..

©Helion-Prime Solutions Ltd.
Custom Software Development Agile Company.