Ruby on Rails is a great web application framework for rapid prototyping. Its ActiveRecord ORM is very robust and easy to use. Its code generation and minimalistic MVC can facilitate quick proofs of concept.
Ruby’s modules tend to be written in native machine code with a thin interoperability layer, which implies a performance improvement over virtual machines (such as Java), but since it’s an interpreted language, it tends to have worse performance than compiled languages in practice.
Some development teams really enjoy the fact that Ruby has great automated testing frameworks – simplifying the team skill requirements and overall development process.
Ruby is a highly dynamic language which permits many different code styles and techniques with impunity. While this can be great to push out new features quickly, it can be difficult to maintain architectural stability if code design is not maintained very carefully. As a result, large applications tend to be very expensive to modify. My recommendation is to strictly limit language constructs with some validation in your Continuous Integration workflow. We don’t need “unless”, BEGIN/END blocks, global variables, or the broken implementations of “&&” and “||”. And that’s not an exhaustive list.
Ruby has an almost cult-like following. It’s often praised for its terse syntax and expressive prose. Many developers love the excess of language constructs and the abundance of modern third-party libraries.
Overall, Ruby on Rails is great for a small team of developers building a small app. You will have great early success with it. But if your development team changes a lot, or if you encounter a lot of ongoing changes to your project, or if the application is very big, you should consider using a different framework.