开启掘金成长之旅!这是我参与「掘金日新计划 · 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 支持的命令
查询某个具体命令的作用,可以通过 “rails 命令 --help” 来查看,如:
执行 “rails about” 命令,显示结果如下:
除了 “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等文件 |