Ruby on Rails应用程序基本目录结构详解与总结
时间:2026-08-17 | 作者:实验室老王 | 阅读:0用 rails new appname 生成一个新项目后,第一件事通常就是先看看这个骨架长什么样。
用 tree 命令扫一眼,整个目录结构会非常直观。下面这张图,就是典型的 Rails 应用目录。
目录结构总览
项目根目录下,主要包含 11 个目录和 5 个顶层文件。
- 目录分别是:
app、config、db、doc、lib、log、public、script、test、tmp、vendor - 文件则是
config.ru、Gemfile、Gemfile.lock、Rakefile、README.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/models、app/controllers、app/views 里。
控制器还可以继续用子目录组织。例如,后台管理功能可以放到 cpanel 子目录下。
视图的布局文件默认放在 app/views/layouts,文件名是 application.html.erb。
Assets 静态文件
Rails 3.1+ 引入了资源管道(Asset Pipeline),所有前端静态文件统一放在 app/assets 下。
imagesstylesheetsja vascripts
辅助方法(Helpers)
app/helpers 里放的是可以在视图中直接调用的小方法,用来生成复杂的 HTML。
默认每个控制器对应一个同名 helper 文件,但这并非强制。
在任何 helper 中定义的方法,都能在所有视图中使用。
配置文件目录(config/)
Rails 虽然推崇“约定优于配置”,但该配置的地方还是不少。
config 目录集中管理了所有配置,主要包括:
application.rb:应用全局设置database.yml:数据库连接routes.rb:路由规则environments/:开发、生产、测试各自的环境配置initializers/:各种初始化文件
Rails 启动流程
当你执行 rails console 或 rails 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 信息的 tokensession_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:测试数据functionalintegrationperformanceunittest_helper.rb
临时文件目录(tmp/)
这里主要用于缓存。
比如 tmp/cache/assets 存放编译后的资源缓存。
第三方插件目录(vendor/)
如果你用 Bundler 指定安装路径 bundle install --path vendor/bundle,Gem 会被安装在此。
另外,vendor/assets 可以存放第三方的 Ja vaScript、CSS 资源,比如 jQuery 插件。
总结
整体来看,Rails 的目录设计遵循了清晰的 MVC 分层和“约定优于配置”的理念。
只要熟悉了这些约定,拿到一个新项目就能很快找到代码该放的位置。
这也正是 Rails 能大幅提升开发效率的原因之一。
免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。
相关文章
更多-
- 使用RVM切换Ruby与Rails版本的实现方法
- 时间:2026-08-18
-
- Ruby语言是什么及入门使用方法
- 时间:2026-08-18
-
- Ruby on Rails网站项目搭建入门指南
- 时间:2026-08-18
-
- Ruby插入排序算法实现与二路插入排序代码示例
- 时间:2026-08-18
-
- Ruby图片滤镜算法实现代码与核心原理
- 时间:2026-08-18
-
- Ruby中Hash哈希结构基本操作方法详解
- 时间:2026-08-18
-
- Ruby面向对象编程:类方法与类扩展详解
- 时间:2026-08-18
-
- Ruby正则表达式语法详解与常用示例代码
- 时间:2026-08-18
精选合集
更多大家都在玩
大家都在看
更多-
- 糖尿病完全不能吃糖吗
- 时间:2026-09-15
-
- 蚂蚁庄园小课堂2026年9月16日最新题目答案
- 时间:2026-09-15
-
- 小鸡答题今天的答案是什么2026年9月16日
- 时间:2026-09-15
-
- 蚂蚁庄园每日答题答案2026年9月16日
- 时间:2026-09-15
-
- 以下哪种粮食是酿造绍兴黄酒的主要原料 蚂蚁庄园今日答案9月16日
- 时间:2026-09-15
-
- 劝学名句“及时当勉励,岁月不待人”出自哪位诗人 蚂蚁庄园今日答案9.16
- 时间:2026-09-15
-
- 蚂蚁庄园今天答题答案2026年9月16日
- 时间:2026-09-15
-
- 蚂蚁庄园答题今日答案2026年9月16日
- 时间:2026-09-15
