Ruby on Rails 學(xué)習(xí)(二)——Rails的目錄結(jié)構(gòu)

在學(xué)習(xí)rails時(shí),我們有必要了解rails程序中的目錄結(jié)構(gòu)。
rails對(duì)于不同的文件,不同的代碼存放在什么樣的文件目錄中有著明確要求。在rails中,有一條原則是:“慣例優(yōu)于設(shè)置”(Convention Over Configuration),按照rails的約定去編程,往往能起到事半功倍的效果。
在這里,我們將對(duì)rails程序中的主要的文件及文件夾進(jìn)行介紹。

一個(gè)具有MVC完整結(jié)構(gòu)的目錄結(jié)構(gòu)

首先,我們來(lái)看一個(gè)rails程序的目錄結(jié)構(gòu),這個(gè)目錄具有完整的MVC結(jié)構(gòu)。我們通過(guò)tree命令來(lái)查看程序的目錄結(jié)構(gòu):

vito@vito-HP:~/rails/test_of_rails/catalog_demo$ tree
.
├── app
│   ├── assets
│   │   ├── config
│   │   │   └── manifest.js
│   │   ├── images
│   │   ├── javascripts
│   │   │   ├── application.js
│   │   │   ├── cable.js
│   │   │   ├── catalog.coffee
│   │   │   └── channels
│   │   └── stylesheets
│   │       ├── application.css
│   │       └── catalog.scss
│   ├── channels
│   │   └── application_cable
│   │       ├── channel.rb
│   │       └── connection.rb
│   ├── controllers
│   │   ├── application_controller.rb
│   │   ├── catalog_controller.rb
│   │   └── concerns
│   ├── helpers
│   │   ├── application_helper.rb
│   │   └── catalog_helper.rb
│   ├── jobs
│   │   └── application_job.rb
│   ├── mailers
│   │   └── application_mailer.rb
│   ├── models
│   │   ├── application_record.rb
│   │   ├── concerns
│   │   └── user.rb
│   └── views
│       ├── catalog
│       │   └── catalog_test.html.erb
│       └── layouts
│           ├── application.html.erb
│           ├── mailer.html.erb
│           └── mailer.text.erb
├── bin
│   ├── bundle
│   ├── rails
│   ├── rake
│   ├── setup
│   └── update
├── config
│   ├── application.rb
│   ├── boot.rb
│   ├── cable.yml
│   ├── database.yml
│   ├── environment.rb
│   ├── environments
│   │   ├── development.rb
│   │   ├── production.rb
│   │   └── test.rb
│   ├── initializers
│   │   ├── application_controller_renderer.rb
│   │   ├── assets.rb
│   │   ├── backtrace_silencers.rb
│   │   ├── cookies_serializer.rb
│   │   ├── filter_parameter_logging.rb
│   │   ├── inflections.rb
│   │   ├── mime_types.rb
│   │   ├── new_framework_defaults.rb
│   │   ├── session_store.rb
│   │   └── wrap_parameters.rb
│   ├── locales
│   │   └── en.yml
│   ├── puma.rb
│   ├── routes.rb
│   ├── secrets.yml
│   └── spring.rb
├── config.ru
├── db
│   ├── development.sqlite3
│   ├── migrate
│   │   └── 20161030073918_create_users.rb
│   ├── schema.rb
│   └── seeds.rb
├── Gemfile
├── Gemfile.lock
├── lib
│   ├── assets
│   └── tasks
├── log
│   └── development.log
├── public
│   ├── 404.html
│   ├── 422.html
│   ├── 500.html
│   ├── apple-touch-icon.png
│   ├── apple-touch-icon-precomposed.png
│   ├── favicon.ico
│   └── robots.txt
├── Rakefile
├── README.md
├── test
│   ├── controllers
│   │   └── catalog_controller_test.rb
│   ├── fixtures
│   │   ├── files
│   │   └── users.yml
│   ├── helpers
│   ├── integration
│   ├── mailers
│   ├── models
│   │   └── user_test.rb
│   └── test_helper.rb
├── tmp
│   └── cache
│       └── assets
└── vendor
    └── assets
        ├── javascripts
        └── stylesheets

46 directories, 69 files

Rubymine中程序的目錄結(jié)構(gòu):

rails_catalog_all.png

下面我們將基于這個(gè)目錄結(jié)構(gòu)來(lái)介紹各個(gè)目錄及文件。

app/


app目錄是rails程序中的主目錄,其中主要包括assetschannelscontrollers(C)helpersjobsmailersmodels(M)views(V)這幾個(gè)文件夾。我們看到,rails程序中的MVC的文件夾都存放在app文件夾中,因此我們需要做的絕大多數(shù)工作都是在app文件夾中進(jìn)行的。

app/assets/

通常放置我們自己為了自己的程序所寫的js,css,或者是images文件,分別放在javascripts(js)stylesheets(CSS)images文件夾下。

app/channels/

Action Cable中的組件,Action Cable結(jié)合WebSockets來(lái)實(shí)現(xiàn)瀏覽器端實(shí)時(shí)的消息通知。一般情況下我們很少使用。

app/controllers/

rails程序中的控制器文件(controller層)一般都存放在這個(gè)文件夾下

app/helpers/

主要用來(lái)存放helper方法。在Rails中,Helper指的是可以在Template中使用的輔助方法,主要用途是可以將資料轉(zhuǎn)化成輸出用的HTML字串。每個(gè)控制器都可以有一個(gè)對(duì)應(yīng)的Helper模塊,它在app/helper目錄下,與控制器文件同名。例如catalog_controller.rb對(duì)應(yīng)的helper文件catalog_helper.rb。當(dāng)我們希望一個(gè)helper方法是全局共享時(shí),通常將該方法放在application_helper.rb中。

app/jobs/

用來(lái)存放任務(wù)文件,確保任務(wù)文件繼承自 ActiveJob::Base即可。

Active Job 是用來(lái)聲明任務(wù),并把任務(wù)放到多種多樣的隊(duì)列后臺(tái)中執(zhí)行的框架。從定期地安排清理,費(fèi)用賬單到發(fā)送郵件,任何事情都可以是任務(wù)。任何可以切分為小的單元和并行執(zhí)行的任務(wù)都可以用 Active Job 來(lái)執(zhí)行。
** Active Job 的目標(biāo)**
主要是確保所有的 Rails 程序有一致任務(wù)框架,即便是以 “立即執(zhí)行”的形式存在。

app/mailers/

用來(lái)存放實(shí)現(xiàn)發(fā)送郵件功能的文件。

Rails 使用 Action Mailer 實(shí)現(xiàn)發(fā)送郵件功能,郵件由郵件程序和視圖控制。郵件程序繼承自 ActionMailer::Base,作用和控制器類似,保存在文件夾 app/mailers 中,對(duì)應(yīng)的視圖保存在文件夾 app/views 中。

app/models/

用來(lái)存放model文件(M層),例如user.rb文件,這個(gè)User模型對(duì)應(yīng)一個(gè)名為users的table(表),一個(gè)模型最多只能對(duì)應(yīng)一張表(可以不對(duì)應(yīng)表)。

app/views/

用命令生成controller時(shí),即

rails g controller catalog

會(huì)在app/views文件夾下生成對(duì)應(yīng)的一個(gè)文件夾,文件夾名稱與控制器名稱相同,在此文件夾下即可生成對(duì)應(yīng)控制器的視圖文件,例如本例中的app/views/catalog/catalog_test.html.erb文件。

bin/


存放運(yùn)行程序的 rails 腳本,以及其他用來(lái)部署或運(yùn)行程序的腳本。

config/


config文件夾下主要包括environments/initializers/locales/這三個(gè)文件夾和若干文件,主要是存放對(duì)rails程序進(jìn)行配置的文件。
下面對(duì)部分重要的文件夾及文件進(jìn)行介紹。具體的配置內(nèi)容見(jiàn)這里

config/environments/

rails程序的不同運(yùn)行環(huán)境的配置包括:

  • config/environments/development.rb 開發(fā)環(huán)境配置文件
  • config/environments/test.rb 測(cè)試環(huán)境配置文件
  • config/environments/production.rb 生產(chǎn)環(huán)境配置文件

config/initializers/

加載完框架以及程序中使用的gem后,Rails會(huì)加載初始化腳本。初始化腳本是個(gè)Ruby文件,存儲(chǔ)在程序的config/initializers文件夾中。初始化腳本可在框架和gem 載完成后做設(shè)置。

config/boot.rb

配置rails程序的Bundler以及加載路徑。
保存并加載可在命令行中執(zhí)行的任務(wù)。任務(wù)在 Rails 的各組件中定義。如果想添加自己的任務(wù),不要修改這個(gè)文件,把任務(wù)保存在 lib/tasks 文件夾中。

config/application.rb

根據(jù)不同的啟動(dòng)環(huán)境(Rails.env)加載不同的rails gems, 配置應(yīng)用程序。

config/environment.rb

執(zhí)行所有啟動(dòng)程序(initializers)。

config/boot.rbconfig/application.rbconfig/environment.rb這三個(gè)文件都在啟動(dòng)整個(gè)rails環(huán)境時(shí)加載。

config/routes.rb

rails程序的路由文件,添加路由時(shí)需要在此文件中添加。

config/database.yml

用來(lái)配置rails程序連接數(shù)據(jù)庫(kù)的文件,包括連接的數(shù)據(jù)庫(kù)類型、數(shù)據(jù)庫(kù)連接池限制數(shù)量等。

db/


存放當(dāng)前數(shù)據(jù)庫(kù)的模式,以及數(shù)據(jù)庫(kù)遷移文件。

db/migrate/

用來(lái)存放數(shù)據(jù)庫(kù)的遷移文件。

db/development.sqlite3

當(dāng)前程序連接的數(shù)據(jù)庫(kù)文件

db/schema.rb

這個(gè)文件用來(lái)記錄當(dāng)前遷移的版本編號(hào),同時(shí)匹配最新的數(shù)據(jù)庫(kù)結(jié)構(gòu)。

db/seeds.rb

通過(guò)這個(gè)文件,可以直接把初始化數(shù)據(jù)存入數(shù)據(jù)庫(kù)。

lib/


程序的擴(kuò)展模塊。

lib/assets/

通常是放置我們使用的插件中用到的assets。

lib/tasks/

Rake的任務(wù)一般存放在lib/tasks目錄下。

log/


程序的日志文件。不同環(huán)境下會(huì)生成不同的日志文件,例如development.logproduction.logserver.logtest.log,我們?cè)陂_發(fā)時(shí)的信息都寫在development.log里,而測(cè)試時(shí)的log都寫在test.log里。

public/


唯一對(duì)外開放的文件夾,其他人可以直接訪問(wèn)這個(gè)目錄中的東西。在這里存放于框架不進(jìn)行交互的資源文件或網(wǎng)頁(yè)文件。與這個(gè)目錄相對(duì)應(yīng),app目錄中的內(nèi)容是對(duì)外隱藏的。

test/


用于存放單元測(cè)試、功能測(cè)試及整合測(cè)試文件等測(cè)試文件。

temp/


臨時(shí)文件,例如緩存,PID,會(huì)話文件。

vendor/


存放第三方代碼。經(jīng)常用來(lái)放第三方 gem。

vendor/assets/

通常是放置一些我們從別的地方借用的assets,比如說(shuō)一些jquery插件。

config.ru


基于 Rack 服務(wù)器的程序設(shè)置,用來(lái)啟動(dòng)程序。

Gemfile


用來(lái)指定程序所需的gem依賴件,用于Bundler gem。

Gemfile.lock


命令:

bundle install

執(zhí)行后生成的文件,用來(lái)記錄當(dāng)前使用的gem信息。依賴于Gemfile

Rakefile


保存并加載可在命令行中執(zhí)行的任務(wù)。任務(wù)在 Rails 的各組件中定義。如果想添加自己的任務(wù),不要修改這個(gè)文件,把任務(wù)保存在 lib/tasks 文件夾中。

這就是rails程序的目錄結(jié)構(gòu),明確每一個(gè)文件夾及文件的功能,對(duì)后面rails的學(xué)習(xí)開發(fā)是至關(guān)重要的,畢竟rails是“慣例優(yōu)于設(shè)置”的,不同功能的文件放在對(duì)應(yīng)的文件夾下,才更符合rails的開發(fā)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 使用rails new appname生成Rails應(yīng)用后,我們可以通過(guò)tree命令來(lái)查看Rails應(yīng)用的目錄結(jié)構(gòu)...
    狂猿閱讀 676評(píng)論 0 0
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,969評(píng)論 19 139
  • 一、知識(shí)概要 1.Ruby簡(jiǎn)介 (1)Ruby是一種開源的面向?qū)ο蟪绦蛟O(shè)計(jì)的服務(wù)器端腳本語(yǔ)言,與很python接近...
    容探錄閱讀 1,194評(píng)論 0 6
  • React.js的Rails開發(fā)者指南 原作者:Fernando Villalobos 原文鏈接:https://...
    不知道為啥被屏蔽閱讀 3,724評(píng)論 0 24
  • 學(xué)習(xí) ruby on rails 有一段時(shí)間了,也寫過(guò)一些簡(jiǎn)單的程序。但對(duì) rails 一直充滿神秘感,為什么我們...
    z_k閱讀 2,711評(píng)論 1 7