Ruby on Rails 學習(二)——Rails的目錄結構

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

一個具有MVC完整結構的目錄結構

首先,我們來看一個rails程序的目錄結構,這個目錄具有完整的MVC結構。我們通過tree命令來查看程序的目錄結構:

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中程序的目錄結構:

rails_catalog_all.png

下面我們將基于這個目錄結構來介紹各個目錄及文件。

app/


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

app/assets/

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

app/channels/

Action Cable中的組件,Action Cable結合WebSockets來實現瀏覽器端實時的消息通知。一般情況下我們很少使用。

app/controllers/

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

app/helpers/

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

app/jobs/

用來存放任務文件,確保任務文件繼承自 ActiveJob::Base即可。

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

app/mailers/

用來存放實現發送郵件功能的文件。

Rails 使用 Action Mailer 實現發送郵件功能,郵件由郵件程序和視圖控制。郵件程序繼承自 ActionMailer::Base,作用和控制器類似,保存在文件夾 app/mailers 中,對應的視圖保存在文件夾 app/views 中。

app/models/

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

app/views/

用命令生成controller時,即

rails g controller catalog

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

bin/


存放運行程序的 rails 腳本,以及其他用來部署或運行程序的腳本。

config/


config文件夾下主要包括environments/、initializers/locales/這三個文件夾和若干文件,主要是存放對rails程序進行配置的文件。
下面對部分重要的文件夾及文件進行介紹。具體的配置內容見這里

config/environments/

rails程序的不同運行環境的配置包括:

  • config/environments/development.rb 開發環境配置文件
  • config/environments/test.rb 測試環境配置文件
  • config/environments/production.rb 生產環境配置文件

config/initializers/

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

config/boot.rb

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

config/application.rb

根據不同的啟動環境(Rails.env)加載不同的rails gems, 配置應用程序。

config/environment.rb

執行所有啟動程序(initializers)。

config/boot.rb、config/application.rb、config/environment.rb這三個文件都在啟動整個rails環境時加載。

config/routes.rb

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

config/database.yml

用來配置rails程序連接數據庫的文件,包括連接的數據庫類型、數據庫連接池限制數量等。

db/


存放當前數據庫的模式,以及數據庫遷移文件。

db/migrate/

用來存放數據庫的遷移文件。

db/development.sqlite3

當前程序連接的數據庫文件

db/schema.rb

這個文件用來記錄當前遷移的版本編號,同時匹配最新的數據庫結構。

db/seeds.rb

通過這個文件,可以直接把初始化數據存入數據庫。

lib/


程序的擴展模塊。

lib/assets/

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

lib/tasks/

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

log/


程序的日志文件。不同環境下會生成不同的日志文件,例如development.logproduction.log、server.log、test.log,我們在開發時的信息都寫在development.log里,而測試時的log都寫在test.log里。

public/


唯一對外開放的文件夾,其他人可以直接訪問這個目錄中的東西。在這里存放于框架不進行交互的資源文件或網頁文件。與這個目錄相對應,app目錄中的內容是對外隱藏的。

test/


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

temp/


臨時文件,例如緩存,PID,會話文件。

vendor/


存放第三方代碼。經常用來放第三方 gem。

vendor/assets/

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

config.ru


基于 Rack 服務器的程序設置,用來啟動程序。

Gemfile


用來指定程序所需的gem依賴件,用于Bundler gem。

Gemfile.lock


命令:

bundle install

執行后生成的文件,用來記錄當前使用的gem信息。依賴于Gemfile。

Rakefile


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

這就是rails程序的目錄結構,明確每一個文件夾及文件的功能,對后面rails的學習開發是至關重要的,畢竟rails是“慣例優于設置”的,不同功能的文件放在對應的文件夾下,才更符合rails的開發。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,923評論 6 535
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,740評論 3 420
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,856評論 0 380
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,175評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,931評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,321評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,383評論 3 443
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,533評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,082評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,891評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,067評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,618評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,319評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,732評論 0 27
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,987評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,794評論 3 394
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,076評論 2 375

推薦閱讀更多精彩內容