DEV Community

Oleksandr Simonov for Amoniac OÜ

Posted on

Why we love and choose Ruby instead of Node.js?

Making pretty code with Ruby

Ruby on Rails is an open-source platform from which programmers become happy, code is pretty, and development is reliable and fast.

RoR is a framework written in the Ruby programming language, implements the architectural pattern Model-View-Controller for web applications, and also provides integration with a web server and database server. It opens software and licensed under conditions of the MIT license.

Created by David Heinemeier Hansson based on his 37signals work on the Basecamp project management tool that released in 2004.

RoR fully-fledged website framework that includes everything to complete a website project including an ability to manage logic, routing, and applications, all from the box. These handy tools also include database integration and controllers which makes it easier to facilitate web development on an end to end basis.

Key benefits of Ruby and Ruby on Rails

ruby web development

Development speed

The main advantage of the Ruby language is the speed of development that increased by 30-40 percent with any other programming language or framework. The growth rate of development determined by an extensive set of ready-to-work standard RoR tools, a massive set of already made solutions in the community, the Ruby language and the simplicity of programming on it.

One of the most critical parts of the RoR culture is sociality. Solved the problem and helped solve others. I implemented my module, so, share it with the community. Thus, thousands of ready-made solutions of various tasks stored in open access. Authentication, authorization, commenting, payment systems, mailing lists and much more implemented by others, implemented and tested and recommended by numerous communities.

Culture and Standards

Ruby on Rails is a framework that does not allow you amateur performance. In RoR, you can “invent your own bike” and program in any direction without relying on standards; but this is not required. Criteria for placing files, standards for writing code, general rules for programming in the community actively structure any project. Due to this, it becomes readable. Entry into the project of newcomers is high-speed. Experience shows that any newcomer to the project on the first day of work makes its first useful edits. Due to this, it not a big problem if the project development by one team of programmers and project support or revision by an entirely different team. The project on RoR is a priori clear to any developer.

Testing Tools

When developing any major project, a reasonable question arises. How and who will test the project? There is not always the means and desire to create entire departments of testing, especially to automate this process. Unlike other frameworks, RoR has excellent automated testing tools. There are no standard testing tools in other programming languages and frameworks. There is third-party development that allows you to organize automatic testing of a project in other languages, but they are not out of the box, and programmers do not think about using them. In a project on RoR, ideally, the project code is not written until tests written for this code. RoR ideology implies the initial use of BDD (Behavior Driven Development) or TDD (Test Driven Development) methods.

More info about testing can be found in our previous article here https://amoniac.eu/blog/post/tests-as-must-have-for-complex-projects

Caching tools

Project caching is one of the most critical stages in the development of a large Internet project. Different languages have different data caching options. These options and tools are screwed, attached, fastened, attached at the side. Until now, there is no consensus in the community what is to use, how to cache the data, what tools to use.

Ruby on Rails in its basic configuration has regular data caching tools. At the start, tools provided that allow you to implement data caching on the project. You can cache whole pages or blocks of code. You can cache query results and ActiveRecord — models. You can cache as with Memcached or Redis and other means. To implement caching on a Ruby on Rails project, in 95 percent of cases you will not need anything other than ready-made and standard solutions.

Localization tools

There is a situation when someone has done a project, and then suddenly realizes that to continue the development of the project, a version in some other language is necessary. Developers working with other programming languages at the same time begin to talk about the fact that it not foreseen in advance, that it is long and complicated. Let's say, let's open a parallel project, which will be a complete copy of this, and translate it.

The basic configuration of Ruby on Rails has project localization tools. You may consider the need to support various languages ​​on the site both initially and in the future. RoR can distribute templates for different languages, contains configuration files with a translation of terms and many other regular tools for implementing the project localization.

Nice routing

In many projects, we can see when the address of a particular page is huge and unclear. In Ruby, there is a regular ability to flexibly configure your routing, the type of addresses, the names of the main sections. It is possible to quickly change addresses in one place without having to change this address throughout the project. In the community of RoR – developers, REST ideology is actively used. The addresses of pages in projects on Ruby on Rails are always clear, beautiful, correctly understood by search engines and simple.

Validations tools

In Ruby on Rails, tools are correctly implemented to validate incoming data. Your users fill out forms, and you need to check the correctness of the entered email address, the presence of a password or the required minimum length of the login — regular means of Rails will help you with this.

Migrations and work with the database

The common problem of many projects written in other languages is the inability to control the structure of the database using clear tools and tools. Changes to the structure are made manually and directly into the database. Because of this, many incomprehensible fields and tables appear in the project, about which no one remembers anything. In Ruby on Rails, there are regular database tools - “migrations.” The database structure is stored in the application code and configured from the project. Your structure will always be in the repository, any change to the structure will be documented and tied to a specific commit in the repository.

Security

Ruby on Rails is by default heavily sharpened for project security. When using the RoR tools, SQL injections and XSS attacks excluded. All input parameters escaped by default. Displayed variables in templates also avoided unless you specify the opposite option. The developer has no chance to make security mistakes, although there are exceptions.

Deploy

There are many convenient and enjoyable tools in the Ruby on Rails environment. Including tools used in the deployment process. Using Capistrano, rolling out a new version of an application on a combat server or several servers will require one command in the console that is cap deploy.

Version control systems

When developing any Ruby on Rails project, the use of known version control systems implied. Using git, as we say, “voluntarily — forcibly”, since many systems of automatic project deployment on combat servers do not work without them. RoR programmers initially, when exploring the platform, are forced to learn git, since numerous code examples in the documentation imply the use of these version control systems. Because of this, it is easier for inexperienced beginners to start learning other languages and not to touch Rails until they reach a certain level of understanding of web development as such and its principles.

Task managers

Ruby on Rails was initially designed to implement the Basecamp project management system. Also, on RoR an accessible and free Redmine project management system was created. When working on Rails projects voluntarily-compulsorily use of such systems. All of them integrated with version control systems, which allows more flexible management of project development processes.

Where Ruby on Rails wins vs. Node.js?

ruby on rails web development

Web development best practice

Rails comes with a view to creating the best practice for web development. The creator intended to make it easy to develop sites accordingly a set framework which puts convention before configuration. As such, Ruby On Rails ships with every necessary library and module. And they all implement the model, view and controller paradigm. The intention is to make web development as predictable and smooth a process as possible.

Infrastructure that is expansive

RoR’s built for quick site development, so, it includes an integrated web server, plus, it has a database with generators and scripts; these are powerful and make it easy to together a Rails application. You can use all the necessary bits automatically, and pieces a functioning Rails site requires in place. It’s great for rapid development.

Database interoperability

You can easily migrate Rails databases. Because the model that supports the Rails database, ActiveRecord, can easily translate the differences amongst the numerous SQL interactions. Instead of writing out SQL code, users of Rails can use the Rails language to describe changes to database tables.

So, in effect, the schema created is agnostic of the database in use. Which means you can run Rails application in many database environments.


And where does it lose?

Flexibility can be an issue

Flexibility can be an issue, for every advantage, there is a matching drawback. It is also about RoR. Due to Rails creator’s development vision, you may feel restricted with RoR if your particular application is too unique. The Rails platform imposes a lot of authority on the developmental process, so there can come where adjusting RoR to fit your requirements takes up a massive amount of your time. Whereas merely starting from scratch would have been quicker.

Performance is not always optimized

Again, a positive thing that can also be a negative. Because of the large number of modules in the box, RoR can seemingly bog down when running in the real world. The overall framework is heavier than alternatives, including Node.js. So it’s not so efficient at managing a barrage of requests is typical of many website applications. You can add more server instances, but these use up your memory.

Debugging can be tedious

Because of Ruby on Rails’ complexity and multiple layers, it can be difficult to troubleshoot a Ruby application. Finding an error in the mix can be very time-consuming. So if something goes wrong, compounded by your application’s custom requirements, you can find Ruby on Rails a very tedious platform to develop on.


What is Node.js?

Node.js is a server platform built on JavaScript Engine from Google Chrome (V8 Engine). Node.js developed by Ryan Dalem in 2009, the latest version of the framework is v0.10.36.

Node.js is an open-source, cross-platform JavaScript run-time environment that executes JavaScript code outside of a browser. JavaScript is used primarily for client-side scripting, in which scripts written in JavaScript are embedded in a web page's HTML and run client-side by a JavaScript engine in the user's web browser.

In short, Node.js is a run time environment that allows you to execute server-side, which used to be client-side, code.

So, Node.js, built on version 8 of the Chrome JavaScript engine, lets you execute JavaScript on a server. It was initially intended to make it easier to create push capability for real-time websites. But Node.js is an expansive platform. And it includes native modules that can manage everything from files to computing resources and security.

The Node.js distributed development project, governed by the Node.js Foundation, facilitated by the Linux Foundation's Collaborative Projects program.

node js web development


Features and uses of Node.js

We list some critical elements that make Node.js popular with software developers.

Asynchronous scripts based on events

All Node.js APIs are asynchronous, that is, non-blocking downloads. In essence, Node.js based server never expects data to return from the API. After the call, the server proceeds to the next API, and the Node.js Events notification mechanism helps the server to get a response from the previous API call.

Very fast

Being built on the Google Chrome V8 JavaScript browser, the Node.js library and runs very quickly in code. As for our experience, we prefer to rewrite some code to Go instead of Node.js, and only when it is necessary. Thus, we are leveling the speed advantage of Node.js. But you must understand that in complex applications, different parts can affect speed, like a database, a web server, and more — not just pure language speed.

Single-flow but easily scalable

Node.js uses a single-threaded model with an event loop. The Event engine helps the server response in a nonblocking manner, and provides high scalability, unlike traditional servers, which create limited threads for processing requests. Node.js uses a single-threaded program, and the same program can serve a much larger number of requests than traditional servers, the Apache HTTP Server.

No buffering

Node.js applications do not buffer the data. They output the data in parts.

License

Node.js released under the MIT license.

Where and who uses Node.js?

In these areas, Node.js has established itself as an ideal technological solution:

— applications related to data input/output

— applications for streaming data

— intensive use of real-time data (DIRT)

— JSON API based applications

Among the users are such large companies as eBay, General Electric, GoDaddy, Microsoft, PayPal, Uber, Wikipins, Yahoo! and yammer.


Where Node.js wins vs. Ruby on Rails?

Node.js is excellent for applications that are real-time and which handle a lot of concurrent requests. Under these scenarios, data regularly go between the client and the server. These Real-Time Applications (RTAs) include chat apps, applications for collaborating and video conferencing.

Because Node.jsis event-based, it’s great for handling these apps. Running on a single page, known as SPAs or Single Page Applications, involves a lot of processing on the client side. The primary function for the back-end under these scenarios is to provide a REST API.


TOP 10 famous Ruby on Rails web apps

ruby on rails web apps

Github

Github is a web-based hosting service for version control using Git. It mostly used for computer code. It offers all of the distributed version control and source code management (SCM) functionality of Git as well as adding its features.

It provides access control and several collaboration features such as bug tracking, feature requests, task management, and wikis for every project.

Bloomberg

Bloomberg is a privately held financial, software, data, and media company headquartered in Midtown Manhattan, New York City. It was founded by Michael Bloomberg in 1981, with the help of Thomas Secunda, Duncan MacMillan, Charles Zegar, and a 30% ownership investment by Merrill Lynch. Bloomberg L.P. provides financial software tools such as an analytics and equity trading platform, data services, and news to financial companies and organizations through the Bloomberg Terminal, its core revenue-generating product.

Yellow Pages

The yellow pages are any telephone directory of businesses, organized by category rather than alphabetically by business name, and in which advertising is sold. The directories originally printed on yellow paper, as opposed to white pages for non-commercial listings. The traditional term "yellow pages" is now also applied to online directories of businesses.

Shopify

Shopify is a Canadian e-commerce company headquartered in Ottawa, Ontario. It is also the name of its proprietary e-commerce platform for online stores and retail point-of-sale systems. Shopify offers online retailers a suite of services including payments, marketing, shipping and customer engagement tools to simplify the process of running an online store for small merchants.

Groupon

Groupon is an American worldwide e-commerce marketplace connecting subscribers with local merchants by offering activities, travel, goods and services in 15 countries. Based in Chicago, Groupon was launched in November 2008, and the first market for Groupon was Chicago, followed soon after that by Boston, New York City, and Toronto. By October 2010, Groupon was available in 150 cities in North America and 100 cities in Europe, Asia, and South America.

Airbnb

Airbnb is a privately held global company headquartered in San Francisco that operates an online marketplace and hospitality service which is accessible via its websites and mobile apps. Members can use the service to arrange or offer lodging, primarily homestays, or tourism experiences. The company does not own any of the real estate listings, nor does it host events; as a broker, it receives commissions from every booking.

Dribbble

Dribbble is an online community for showcasing user-made artwork. It functions as a self-promotion and networking platform for graphic design, web design, illustration, photography, and other creative areas. It was founded in 2009 by Dan Cederholm and Rich Thornett, becoming publicly available in 2010. It is one of the largest platforms for designers to share their work online.

SlideShare

SlideShare is a hosting service for professional content including presentations, infographics, documents, and videos. Users can upload files privately or publicly in PowerPoint, Word, PDF, or OpenDocument format. Content can then be viewed on the site itself, on handheld devices or embedded on other sites. The website was originally meant to be used for businesses to share slides among employees more efficiently, but it also has expanded to become a host of a large number of slides that are uploaded merely to entertain.

Hulu

Hulu is an American entertainment company that provides "over-the-top media services." It is primarily oriented towards instant streaming of television series, carrying current and past episodes of many series from its owners' respective television networks and other content partners.

SoundCloud

SoundCloud was established in Berlin in August 2007 by Swedish sound designer Alexander Ljung and Swedish electronic musician Eric Wahlforss, and the website launched in October 2008. SoundCloud is an online audio distribution platform and music sharing website based in Berlin, Germany that enables its users to upload, promote, and share audio.

Read more about developments and technologies we use in our blog here https://amoniac.eu/blog

Top comments (5)

Collapse
 
guledali profile image
guledali • Edited

When you compare something like ruby on rails to Node.js, ruby wins that fight. A webframework vs language is not a fair comparison at all.

I do wonder though companies such github, airbnb and shopify, if their system went down today and they had to greenfield a new app. Would they still use ruby today? Maybe they would maybe not

I have tried ruby what bother me most with the language was the lack of static typing and intellense. This is so much of issue that the creator of ruby himself have said that ruby 3 is going to ship with static typing much like TypeScript.

Kinda wish they did that in ruby 2 so that all of the 3-party gems had type definitions in them. Better late than never I guess.

Another thing one should also consider is time? They way we build apps these days is more component driven architecture some call it SPA or as I like to call it fat client. Ruby on rails is MVC framework, while rails still fitting for api development, it was designed more for doing fat servers and using baas like firebase + cloud functions and amplify framework is more suitable for building fat client in my opinion.

For example with these services you getting authentication out-of-the-box, and I always liked how the device gem worked. You install and run generator puff you had auth ready to use. When you decouple you're app the integration gets wacky you spend half day figure out how to do a current_user method that you can use on your client both firebase and aws amplify gives you that for free.

We live in a different time and they way we build web apps today is different, no one was using react.js or vue.js 2005-2011

Collapse
 
simonoff profile image
Oleksandr Simonov

If you look at all frameworks/libraries for Node.js - in most cases they are clones of projects from Ruby world.

It's still faster build apps with Ruby even with any node.js frameworks like sails.js or similar due to the language features like metaprogramming.

Collapse
 
michi profile image
Michael Z • Edited

You are comparing a framework with a programming language (actually Node.js is not even that, it's a js runtime).

That being said there are some strong frameworks in the nodejs world itself. If you want something inspired by RoR/Laravel, go check out AdonisJs, it comes with many RoR concepts like active record, convention over configuration etc. Also has db migrations and everything. (I've written some articles about it)

There are some more higher level frameworks like Nestjs but haven't looked into it much.

Example of how a test looks like in AdonisJs:

test('resets password with correct token', async ({ assert, client }) => {
  const user = await Factory.model('App/Models/User').create()
  const token = await (new TokenService).generateToken(user.email)

  const response = await client.post('/password/reset').send({ email: user.email, token, password: 'new password' }).end()
  await user.reload()

  response.assertStatus(200)
  response.assertJSON({ message: 'Password reset successful.' })
  assert.isTrue(await user.verify('new password'))
})
Enter fullscreen mode Exit fullscreen mode
Collapse
 
simonoff profile image
Oleksandr Simonov

I don't like async/await at all. Its making code more hard to understand and debug.
In the case of Ruby mostly all web ecosystem working around Rails.

Collapse
 
enowmbi profile image
Enow B. Mbi

Great Post. Thanks. I like that you mentioned, "If you look at all frameworks/libraries for Node.js - in most cases they are clones of projects from Ruby world."