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.