🌟 We are Open Source! Check out our repository on GitHub

Ruby on Rails Project Structure

A scalable and maintainable folder structure for Ruby on Rails applications

File Structure

  • app
    • controllers
      • application_controller.rb
      • users_controller.rb
      • api
    • models
      • application_record.rb
      • user.rb
      • concerns
    • views
      • layouts
      • users
      • shared
    • services
      • user_service.rb
      • email_service.rb
    • jobs
      • application_job.rb
      • email_job.rb
    • mailers
      • application_mailer.rb
      • user_mailer.rb
  • config
    • routes.rb
    • application.rb
    • database.yml
    • environments
    • initializers
  • db
    • migrate
    • seeds.rb
    • schema.rb
  • lib
    • tasks
    • modules
  • spec
    • models
    • controllers
    • features
  • Gemfile
  • Gemfile.lock
  • Rakefile
  • config.ru
  • README.md

Directory Structure Explanation

controllers/api/

Contains API controllers organized separately from web controllers.

models/concerns/

Contains mixins and shared modules that can be included in multiple models.

views/shared/

Contains partial templates that are shared across multiple views.

app/services/

Contains service objects that encapsulate complex business logic separate from models.

services/user_service.rb

Service class handling complex user-related operations and business logic.

app/jobs/

Contains background job classes for asynchronous task processing.

app/mailers/

Contains mailer classes for sending emails from the application.

config/initializers/

Contains initialization files that run when the application starts.

lib/

Contains custom libraries, modules, and rake tasks specific to the application.

lib/tasks/

Contains custom Rake tasks for application maintenance and data processing.

spec/

Contains RSpec test files organized by application component type.

Rakefile

Defines Rake tasks available for the application.

config.ru

Rack configuration file used by Rack-based servers to start the application.