Journey on Rails: ROR 6’s File Structure
Tags: ruby, rails, beginners, tutorial
Published: 2020-09-15 02:46:49

Do you know David Heinemeier Hansson, the creator of ruby on rails is a race driver😲? Interestingly, David has participated in 98 races winning 10 out of 98. 

It is apparent David is familiar with voyaging and journeying on a fast lane. No wonder the web framework suits the Rapid Application Development (RAD) development model perfectly. 

Maybe, that’s where the concept of the name ruby on rails came from. Realizing a gem while journeying🤔? Who knows🤔? Enough of the assumptions. One fact to note is that his 41st birthday is a month exactly from today and it’s a great opportunity to appreciate Dave for the great framework he created. Moreso, making it open source.

However, it could be a scary journey while traversing around rails for the first time. For some, they begin with a false start running off rails and never coming back to the framework seeing the number of files and directories being created on running the first project setup command:

                      rails new [new-project]

Running a `dir*.*/s` on windows for the newly created project shows that it has 8,276 directories and 16,729 files. In order not to scare you, rails also ensure this detail is encapsulated by giving you a nice directory structure such as this:

![railstruc](https://dev-to-uploads.s3.amazonaws.com/i/k57zqgq0gu8qyonjn3nl.png)
 
 

It would be nice to breakdown the structure of these files meaningfully. Wouldn’t it? Join me in this journey 🚶 on rails 🚆 as I take you through the file structure so you won’t have a false start.

####DON’T MESS WITH THESE FILES 
Before we begin this journey, I would be giving out this basic rule. It is best to keep by this unless your journey on rails might be sloppy. It is best not to manipulate with certain files on rails if you don’t have an idea of what they do especially in production. It would even be more disastrous deleting these files.  Top-of-the-list is all files in app/config directory. Just as the name goes, the config directory has all the basic configurations for your project including but not limited to environment setup, active records configurations, mailbox configurations, database setup, routing and other configurations. 
Some config files you would be using frequently on your journey are config/database.yml for database setup, config/routes.rb for routing, config/application.rb for application-specific configurations, and master.key for storing your application’s secret key. The config/environments allow you to setup rails for different environments such as development, staging, and production. You should also not mess with the bin, lib, and the javascript helpers such as node_modules and the yarn.lock file as they manage binstubs, libraries, webpack and dependencies respectively. And I really don’t see why you would want to modify these files without proper knowledge anyway.

####Rails Extensions 
Now that we know the rules, we can continue our journey on rails. Seeing a bunch of files and directories may be confusing and one good way to identify them is by the file extension type. I would be explaining some usual file extensions you would see in a rails 6 application:
#####.coffee 
These are coffee scripts majorly based on javascript webpacker’s implementation.
#####.erb 
This is a templating extension where you can write your HTML, js, etc. and wrap your ruby code around it. You would need this mostly in your views.
#####.git 
These are basically files that help manage your source code repositories and versions.
#####Gemfile 
This is where gems and their versions are stored. It has a corresponding lock file that ties the dependencies to the project. Gems are simply plugins, packages, or libraries that would help you code better and lesser. Are they not gems after all?
#####.js 
These are javascript files. You can find javascript files mostly in app/javascript. This would be useful for webpack and websocket configurations.
#####.json and .lock 
package.json is the common culprit inheriting the .json extension. And it basically manages your dependency along with yarn.lock.
#####.key
Stores your secret key such as master.key. Files with this extension are very sensitive.
#####.md 
This is a text file that can be formatted to suit. The most popular file with this extension is README.md where you can document steps in running your project.
#####.rb 
For me, this is the most important file extension as it contains pure ruby code. This is the ruby file extension.
#####.rdoc 
This is a ruby doc file suitable for comment management and other documentation. Rubydoc is a cool tool similar to javadoc and phpdoc.
#####.yml 
This is used for data-serialization and database.yml uses this approach to store database information.

####MVC on Rails 
The beauty of ruby on rails is its graceful representation of the MVC structure. MVC helps to separate your code structure aiding for faster development and reusability. In actual fact, rails extend its separation even down to the server level where the app server runs your rails app and puts your code in memory and sends a response to the webserver which then handles the request and returns back to the app server on processing if necessary, else the webserver is self-sufficient. Common web servers for rails are nginx and apache. However, for the app server, we have puma and unicorn while passenger can act as both. The various directories and files that help to bring about a beautiful MVC structure in rails are:
#####Public 
As with a proper MVC secure structure, this folder is specifically set aside for files and folders that would be available to the public.
#####App/helpers 
The helpers directory is where series of re-usable functions that would aid your development is contained.
#####App/models
This consists of your data representation. The various class building blocks, getter, and setter methods of individual data. Here, you might find database queries used to create various data dimensions.
#####App/views/layouts
This contains your user interface files to provide functionalities to the end-user.
#####App/controllers 
This holds your business logic and does manipulations based on your application rules.

The journey to getting familiar with rails might be rough. But I can assure you it’s worth it. 

Here are some reasons why:

#####Security 
Rails is pretty much a secure framework. I mean a lot of work has been done in making rails as secure as possible. You can read this article here:

https://guides.rubyonrails.org/security.html

#####Write less code, get much more 
With rails, you would be writing just little code because of its excellent file structure and plugins. You would probably be doing more architectural thinking. But I can assure you, a little code written with rails can do much more than expected.

#####Rails also suggest to you to do things right 
With the “convention over configuration” vibe, easier automated testing, version control, off-the-shelf RESTful architecture, seamless separation of development environments, and for the fact ruby can be said to be “strongly typed”, you can hardly write bad code unless you want to anyway.

Some of your favorite apps built with ROR are: Ask.fm, Airbnb, Bloomberg, Dribble, Fiverr, Genius, Goodreads, Scribd, Slideshare, Shopify, and Soundcloud. 

And even our darling dev.to!!!!!

Have a great journey on rails ahead!