Rails 手册 | 03 - 深入 Rails 应用

68 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 1 天,点击查看活动详情

一、Rails 应用的目录结构

Rails 框架在各个不同层面都有自身非常独特的设计,比如固定模式的目录结构设计,开发->测试->生产 3 种运行模式等,这些设计有的是汲取自其他框架,有的是 Rails 的独创。

Rails 的目录结构是通过创建项目命令自动生成的,开发所需要做的事情就是在 Rails 目录这一架构上进行不断地创建和补充。

Rails 应用的目录结构相对比较固定,结构划分十分清晰,使用 "rails new" 命令创建一个应用,目录如下:

$ tree -L 2
.
├── Gemfile
├── Gemfile.lock
├── README.md
├── Rakefile
├── app
│   ├── assets
│   ├── channels
│   ├── controllers
│   ├── helpers
│   ├── javascript
│   ├── jobs
│   ├── mailers
│   ├── models
│   └── views
├── babel.config.js
├── bin
├── config
├── config.ru
├── db
├── lib
├── log
├── node_modules
├── package.json
├── postcss.config.js
├── public
├── storage
├── test
├── tmp
├── vendor
└── yarn.lock

每个目录的含义如下:

目录名作用
app/应用程序代码目录,包含 controllers、helpers、models 和 views 几个主要目录,分别放置控制器代码,模型代码,视图代码等,以及其他目录
bin/rails 应用可以使用的命令都在该目录下
config/该目录主要用于存储 Rails 应用的配置文件,包括环境配置,路由配置以及数据库配置等。
db/存储数据库视图以及迁移文件的目录
Gemfile Gemfile.lock该文件用于记录 Rails 应用所需的依赖
lib/应用的扩展模块
log/应用的日志
package.json指定 Rails 应用的 npm 依赖
public/Web 根目录
test/单元测试、功能测试的相关代码
tmp/临时文件,如缓存等
vendor/存储第三方代码的目录

Rails 中控制器、模型和视图的文件命令和目录结构都符合一定的惯例模式的,通常控制器类的代码文件名称都是以 controller 结尾,且名称小写,不同字母之间有下划线,比如 MyTestController 控制器的文件名为my_test_controller.rb。

ApplicationController 是直接继承 ActionController::Base,其他的包括自定义的 Controller 都是直接继承 ApplicationController的。

模型类文件的命名比较简单,基本上使用下换线分个单词,并使用小写,比如 hello_text.rb 对应的模型类名为 HelloText,模型类都是继承 ActiveRecord::Base。

视图目录 views 目录中首先包含一个 layouts 目录,这个目录中包含了熏染视图的布局模板文件,然后每个控制器都会对应一个文件夹,文件名为控制器名,用来保存于控制器对应的视图文件,比如 MyTestController 对应的视图目录就在 views/my_test 目录下,并且试图中的文件名就是和 MyTestController 中的函数名对应,文件名以 .html.erb 结尾。

Rails 通过这样的规则将控制器,模型和视图的代码记性衔接,完成整个请求的接收和响应。

二、常用命令

rails 包含许多可以使用的命令,可以通过 rails --help 来查看所有 rails 支持的命令

图片.png

查询某个具体命令的作用,可以通过 “rails 命令 --help” 来查看,如:

图片.png

执行 “rails about” 命令,显示结果如下:

图片.png

除了 “about” 命令外,其他命令的作用如下:

命令作用
console一个类似于 irb 的控制台,能够在当前 Rails 环境中进行交互,非常便于对程序中的模型进行测试
generate生成指定的代码,控制器,模型等
destroy与generate配套的工具,用于删除generate生成的代码文件
server运行 Web 服务
runner在web环境之外运行应用程序的一个方法
routes查看应用中的所有路由
test执行单元测试和功能测试
db:create创建数据库
db:drop删除数据库
db:migrate使用 db/migrate 目录下的脚本迁移数据库
log:clear清除 log/ 目录下的日志
tmp:clear清除 tmp/ 目录下的所有的缓存和session等文件