位置:首页 > Ruby > Ruby on Rails应用程序基本目录结构详解与总结

Ruby on Rails应用程序基本目录结构详解与总结

时间:2026-08-17  |  作者:实验室老王  |  阅读:0

rails new appname 生成一个新项目后,第一件事通常就是先看看这个骨架长什么样。

tree 命令扫一眼,整个目录结构会非常直观。下面这张图,就是典型的 Rails 应用目录。

Ruby on Rails所构建的应用程序基本目录结构总结

目录结构总览

项目根目录下,主要包含 11 个目录和 5 个顶层文件

  • 目录分别是:appconfigdbdocliblogpublicscripttesttmpvendor
  • 文件则是 config.ruGemfileGemfile.lockRakefileREADME.rdoc

先不急着逐目录解释,先看看 app 目录里的内容。

因为这里才是你写代码的主战场。

顶层文件作用

config.ru 是 Rack 的启动配置文件,负责拉起整个 Rails 程序:

require ::File.expand_path('../config/environment', __FILE__)
run Myapps::Application

Gemfile 定义了项目的所有依赖(Gem)。

bundle install 安装后,会自动生成 Gemfile.lock 来锁定版本:

source 'https://ruby.taobao.org/'

gem 'rails', '3.2.1'
gem 'sqlite3'

group :assets do
 gem 'sass-rails',  '~> 3.2.3'
 gem 'coffee-rails', '~> 3.2.1'
 gem 'uglifier', '>= 1.0.3'
end

gem 'jquery-rails'
gem ... ...

Rakefile 则是 Rake 任务的入口。

你可以在终端里执行各种自定义任务。

完整目录树

tree 查看完整目录结构如下:

.
├── app
│  ├── assets
│  │  ├── images
│  │  │  └── rails.png
│  │  ├── ja vascripts
│  │  │  └── application.js
│  │  └── stylesheets
│  │    └── application.css
│  ├── controllers
│  │  └── application_controller.rb
│  ├── helpers
│  │  └── application_helper.rb
│  ├── mailers
│  ├── models
│  └── views
│    └── layouts
│      └── application.html.erb
├── config
│  ├── application.rb
│  ├── boot.rb
│  ├── database.yml
│  ├── environment.rb
│  ├── environments
│  │  ├── development.rb
│  │  ├── production.rb
│  │  └── test.rb
│  ├── initializers
│  │  ├── backtrace_silencers.rb
│  │  ├── inflections.rb
│  │  ├── mime_types.rb
│  │  ├── secret_token.rb
│  │  ├── session_store.rb
│  │  └── wrap_parameters.rb
│  ├── locales
│  │  └── en.yml
│  └── routes.rb
├── config.ru
├── db
│  └── seeds.rb
├── doc
│  └── README_FOR_APP
├── Gemfile
├── lib
│  ├── assets
│  └── tasks
├── log
├── public
│  ├── 404.html
│  ├── 422.html
│  ├── 500.html
│  ├── fa vicon.ico
│  ├── index.html
│  └── robots.txt
├── Rakefile
├── README.rdoc
├── script
│  └── rails
├── test
│  ├── fixtures
│  ├── functional
│  ├── integration
│  ├── performance
│  │  └── browsing_test.rb
│  ├── test_helper.rb
│  └── unit
├── tmp
│  └── cache
│    └── assets
└── vendor
  ├── assets
  │  ├── ja vascripts
  │  └── stylesheets
  └── plugins

应用目录(app/)

app 是整个 Rails 程序的主目录。

它按功能分成了若干子目录,分别存放模型(M)、控制器(C)、视图(V),以及邮件器、助手方法和静态资源。

模型-控制器-视图

MVC 三层的代码分别放在 app/modelsapp/controllersapp/views 里。

控制器还可以继续用子目录组织。例如,后台管理功能可以放到 cpanel 子目录下。

视图的布局文件默认放在 app/views/layouts,文件名是 application.html.erb

Assets 静态文件

Rails 3.1+ 引入了资源管道(Asset Pipeline),所有前端静态文件统一放在 app/assets 下。

  • images
  • stylesheets
  • ja vascripts

辅助方法(Helpers)

app/helpers 里放的是可以在视图中直接调用的小方法,用来生成复杂的 HTML。

默认每个控制器对应一个同名 helper 文件,但这并非强制。

在任何 helper 中定义的方法,都能在所有视图中使用。

配置文件目录(config/)

Rails 虽然推崇“约定优于配置”,但该配置的地方还是不少。

config 目录集中管理了所有配置,主要包括:

  • application.rb:应用全局设置
  • database.yml:数据库连接
  • routes.rb:路由规则
  • environments/:开发、生产、测试各自的环境配置
  • initializers/:各种初始化文件

Rails 启动流程

当你执行 rails consolerails server 时,Rails 会按顺序加载以下三个文件:

boot.rb 负责载入 Bundler 环境,由 Rails 自动生成,不需要修改:

require 'rubygems'
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
require 'bundler/setup' if File.exists(ENV['BUNDLE_GEMFILE'])

application.rb 先加载 Rails 自身的 Gem,再加载其他依赖,最后进行应用配置:

require File.expand_path('../boot', __FILE__)
require 'rails/all'

if defined?(Bundler)
  Bundler.require(*Rails.groups(:assets => %w(development test)))
end

module Myapps
  class Application < Rails::Application
    config.encoding = "utf-8"
    config.filter_parameters += [:password]
    config.assets.enabled = true
    config.assets.version = '1.0'
  end
end

environment.rb 负责调用所有 initializers(初始化脚本),同样由 Rails 自动生成:

require File.expand_path('../application', __FILE__)
Myapps::Application.initialize!

初始化文件(initializers)

初始化文件由 environment.rb 按顺序加载。

Rails 默认提供了 6 个:

  • backtrace_silencers.rb:选择性屏蔽异常追踪中的某些条目
  • inflections.rb:自定义单词的单复数转换规则
  • mime_types.rb:注册自定义 MIME 类型
  • secret_token.rb:用于加密 cookies 信息的 token
  • session_store.rb:默认 session 存储方式
  • wrap_parameters.rb:请求参数自动封装为模型属性

数据库存储目录(db/)

db/seeds.rb 用于填充初始数据。

通常配合 rake db:seed 使用。

程序帮助文档(doc/)

这里存放自动生成的文档,如 RDoc 输出。

默认包含一个 README_FOR_APP

共享类或模块文件(lib/)

这里用于存放可复用的类或模块。

Rake 任务建议放在 lib/tasks 下。

日志目录(log/)

开发、测试、生产环境的日志文件都写在这里。

公共文件目录(public/)

Web 服务器可以直接访问这里的静态文件。

  • 错误页面(404、422、500)
  • fa vicon
  • robots.txt

在 Rails 2.x 时代,前端资源也放在这里。

现在已经被 Asset Pipeline 替代。

Rails 脚本文件(script/)

这里存放 Rails 的启动脚本。

例如 rails 命令本身。

测试文件目录(test/)

单元测试、功能测试、集成测试等内容,全部放在这里。

子目录包括:

  • fixtures:测试数据
  • functional
  • integration
  • performance
  • unit
  • test_helper.rb

临时文件目录(tmp/)

这里主要用于缓存。

比如 tmp/cache/assets 存放编译后的资源缓存。

第三方插件目录(vendor/)

如果你用 Bundler 指定安装路径 bundle install --path vendor/bundle,Gem 会被安装在此。

另外,vendor/assets 可以存放第三方的 Ja vaScript、CSS 资源,比如 jQuery 插件。

总结

整体来看,Rails 的目录设计遵循了清晰的 MVC 分层和“约定优于配置”的理念。

只要熟悉了这些约定,拿到一个新项目就能很快找到代码该放的位置。

这也正是 Rails 能大幅提升开发效率的原因之一。

免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。

相关文章

更多

精选合集

更多

大家都在玩

热门话题

大家都在看

更多