Why RoR over PHP Framework ?

Hi,

I'm playing with RoR since Ruby 1.0, now I'm playing with 3.2.

I have to merge/rewrite one ERP from standalone app client/server to web
approach.

Some of this part is made with PHP, but this part is not the most
important, and there is an option that we can rewrite it to other tools
like RoR as some parts have to change.

The main question is why I should choose RoR over other framework PHP
like Kohana or Yii.

I don't want to start a fight here, I want to ask very specific
questions:

- Is it true that a slow queriy on RoR lock all other concurrent
connections? This was true on old RoR versions.

I usualy have my RoR served by Ngix with Thin.

Apahe can serve PHP directly.

This extra layer (Thin, mongrel,...) has some penalty on RoR ?

I know I can have many Thins servers listening and Ngix uses them by
demand, or use Passenger, Unicorn, ... but those options are slowering
the web in comparation with Apache and PHP?

I prefer to use RoR but I have to convince the other programmer and my
Boss, both of them prefer Php because sound better, there are more
developers, bla bla bla

Of course the best is what I'm doing, creating a RoR and Kohana web tot
test this very specific questions, but it's aways good to ask and read
from profressionals like you :slight_smile:

thanks,

Raimon Fs wrote in post #1047848:

- Is it true that a slow queriy on RoR lock all other concurrent
connections? This was true on old RoR versions.

This could be true in many cases, but is this really different from PHP?
Does PHP handle requests concurrently? I'm not really sure about that.
All the "intelligence" in wrapped up inside that Apache module and
there's generally only one of those.

In any case, chances are highly likely that you'll never have to worry
about this. Slow queries are almost always the result of bad design.
Rails and the techniques used by Rails developers provide a multitude of
solutions to this problem, without resorting to concurrent request
processing. In many cases not having concurrent processing simplifies
the app, resulting in increased stability and few hard to find bugs.
Threading is damn hard, as anyone who has had to deal with it will
confirm.

I usualy have my RoR served by Ngix with Thin.

Apahe can serve PHP directly.

Apache does NOT serve PHP directly. It forwards all requests to the PHP
module for processing.

This extra layer (Thin, mongrel,...) has some penalty on RoR ?

This is not an extra layer. It's just in a different place.

I know I can have many Thins servers listening and Ngix uses them by
demand, or use Passenger, Unicorn, ... but those options are slowering
the web in comparation with Apache and PHP?

I prefer to use RoR but I have to convince the other programmer and my
Boss, both of them prefer Php because sound better, there are more
developers, bla bla bla

Convincing your coworkers and boss is not something we can help you
with. That's all on you.

Of course the best is what I'm doing, creating a RoR and Kohana web tot
test this very specific questions, but it's aways good to ask and read
from profressionals like you :slight_smile:

Good approach. You can't know if you have a scaling problem unless you
have metrics to back it up. Pre-optimization is a highly inefficient use
of your time.

Robert Walker wrote in post #1047899:

Raimon Fs wrote in post #1047848:

- Is it true that a slow queriy on RoR lock all other concurrent
connections? This was true on old RoR versions.

This could be true in many cases, but is this really different from PHP?
Does PHP handle requests concurrently? I'm not really sure about that.
All the "intelligence" in wrapped up inside that Apache module and
there's generally only one of those.

Sure I'm missing something, but in Apache you say how many workers want
for PHP and that's all, with Thin/Mongrel/... you have to create them
before, and tell ngix how many you have. Maybe the Unicorn/Passenger is
the solution. I think I'm worried for things that maybe never are going
to happen, as this site is for an ERP where will be used by 100/200
persons.

In any case, chances are highly likely that you'll never have to worry
about this. Slow queries are almost always the result of bad design.

yes, I know.

Rails and the techniques used by Rails developers provide a multitude of
solutions to this problem, without resorting to concurrent request
processing. In many cases not having concurrent processing simplifies
the app, resulting in increased stability and few hard to find bugs.
Threading is damn hard, as anyone who has had to deal with it will
confirm.

I have three sites with RoR, never have had any problem, but are sites
with very low traffic.

I usualy have my RoR served by Ngix with Thin.

Apahe can serve PHP directly.

Apache does NOT serve PHP directly. It forwards all requests to the PHP
module for processing.

This extra layer (Thin, mongrel,...) has some penalty on RoR ?

This is not an extra layer. It's just in a different place.

I don't know why I thout ngix process the page, pass it to Thin and Thin
pass to Ruby, but maybe is Thin who parses and executes the Ruby page
directly?

I know I can have many Thins servers listening and Ngix uses them by
demand, or use Passenger, Unicorn, ... but those options are slowering
the web in comparation with Apache and PHP?

I prefer to use RoR but I have to convince the other programmer and my
Boss, both of them prefer Php because sound better, there are more
developers, bla bla bla

Convincing your coworkers and boss is not something we can help you
with. That's all on you.

Well, you can help convince them with evidences :slight_smile:

Of course the best is what I'm doing, creating a RoR and Kohana web tot
test this very specific questions, but it's aways good to ask and read
from profressionals like you :slight_smile:

Good approach. You can't know if you have a scaling problem unless you
have metrics to back it up. Pre-optimization is a highly inefficient use
of your time.

I'm just testing and playing with it, I have one week for take a
decision, a full payed week just to play with both frameworks/languages.

thanks!

Raimon Fs wrote in post #1047948:

Robert Walker wrote in post #1047899:

Raimon Fs wrote in post #1047848:

- Is it true that a slow queriy on RoR lock all other concurrent
connections? This was true on old RoR versions.

This could be true in many cases, but is this really different from PHP?
Does PHP handle requests concurrently? I'm not really sure about that.
All the "intelligence" in wrapped up inside that Apache module and
there's generally only one of those.

Sure I'm missing something, but in Apache you say how many workers want
for PHP and that's all, with Thin/Mongrel/... you have to create them
before, and tell ngix how many you have. Maybe the Unicorn/Passenger is
the solution. I think I'm worried for things that maybe never are going
to happen, as this site is for an ERP where will be used by 100/200
persons.

The point I was trying to make here is that I have worked with languages
and frameworks that are absolutely proven to be highly performant and
scalable. However, I've found from experience that this hardly ever
matters. One poorly written SQL query, or one missed database index can
have at least a ten-fold effect over a particular choice of programming
language.

The chances of you actually building an app that performance of the
language and framework actually cause you significant problems is next
to nil. And, if you're one of the lucky ones where it does matter, then
that's a really good problem to have. If you did you marketing homework
right, then by that time you'll have the funds to concentrate your
efforts on scaling your app.

I don't know why I thout ngix process the page, pass it to Thin and Thin
pass to Ruby, but maybe is Thin who parses and executes the Ruby page
directly?

In any case the same basic work is happing, whether that be in a single
module or broken into several. I see it as an advantage having choice in
the middleware. Having the choice provides more flexibility for various
deployment scenarios.

Convincing your coworkers and boss is not something we can help you
with. That's all on you.

Well, you can help convince them with evidences :slight_smile:

I suppose my cynicism here is related to my own situation. I have also
tried to convince my team that there are better ways to do things, but
some people are so set in their ways that it's practically impossible to
change their minds, no matter what evidence you provide to them.

I wish you luck in your endeavors.

FYI, we have a very large CRM/ERP application running on Rails that serves well over the number of people you are mentioning.

If you want Rack apps such as Rails to run as an Apache module or nginx module, then use Passenger. It follows the same mindset as the PHP module.

Best regards

Peter De Berdt

Thanks for your comments, I'll keep you informed with the news (good or
bad) :slight_smile:

Hi all again,

I think I have good news, finally was my decision only and this time RoR
won over Php, now the bad news, I'm the only responsable if something
goes wrong because my choice was not 'the popular choice' :slight_smile:

thanks for your inputs again,

regards

You're not the only one. More like you and the Ruby Nation. Get stuck? Just ask, and be sure to copy and paste the error message in your mail.

Walter

Thanks Walter!

I'm not new to RoR, I have two RoR (2.x) that are working and perfectly
for two years without any issue, but are sites with low traffic.

Now it's time (finally) to build one with more than 100 concurrent
users, now time,speed, good tweaks, ... are important.

Now I'm fighting with assets compiled in 3.2.1 and starting using
Passenger with Nginx, previously I was using Nginx + Thin.

We can start another discussion on my job why Nginx and not Apache :slight_smile:

I'll ask here if there's some problem I can't solve ...

thanks again!

regards