當你使用rails new建立新專案,會建立預設的專案環境,至今為止,大致也看過專案中幾個目錄、檔案或設定選項的作用,這一篇中再作個整理。
專案目錄中一開始最常接觸的是app目錄,主要是放置應用程式碼檔案的目錄:
- [app]
- [assets]
放置Web應用程式使用的JavaScript檔案、樣式表(Style sheet)檔案與圖檔等靜態檔案資源,在 資源(Assets) 文件中曾介紹過。
- [images]
- [javascripts]
- application.js
- [stylesheets]
- application.css
- [controllers]
放置控制器程式碼檔案,控制器通常繼承自定義在application_controller.rb中的ApplicationController,命名慣例是xxx_controller.rb中定義XxxController控制器類別作為控制器,如果遵照Rails的RESTful慣例,xxx通常是個複數英文名詞,例如在bookmarks_controller.rb中定義BookmarksController控制器類別,與網址/bookmarks對應。
- application_controller.rb
- [models]
放置模型程式碼檔案,模型通常繼承自ActiveRecord::Base,命名慣例是在xxx_yyy.rb中定義XxxYyy模型類別,對應於資料庫中xxx_yyys表格,例如在auction_item.rb中定義AuctionItem模型類別,對應的是資料表格auction_items。
- [views]
放置樣版與版型檔案的地方,在 樣版(Template) 與 版型(Layout) 文件中介紹過。
- [layouts]
- application.htm.erb
- [helpers]
放置定義輔助方法檔案的地方,在 輔助方法(Helper) 文件中介紹過。
- application_helper.rb
- [mailers]
放置郵件寄送程式碼檔案,郵件類別通常繼承自ActionMailer::Base,命名慣例是xxx_yyy.rb中定義XxxYyy郵件類別,如果類別定義中包括一個ooo動作,則會使用app/views/xxx_yyy中的ooo.text.erb或ooo.html.erb作為樣版檔案。有關郵件發送,之後還會介紹。
專案中另一常接觸的目錄為config,主要放置應用程式相關設定檔案:
- [config]
- routes.rb
路由設定檔案,可參考 基本路由、RESTful 與 Rails 等文件的說明。
- database.yml
資料庫設定檔案,當中可以看到development、test、production三個設定區段,MVC 與 Rails 文件中作過簡介。
- environment.rb
初始Rails應用程式的檔案,不需要修改(Rails3之前還用來放置一些核心選項設定,但Rails3之後核心選項設定已改放application.rb)。 - application.rb
放置Rails核心選項設定的檔案,像是先前文件看過的config.encoding,就是在這邊設定,這邊設定的選項會影響development、test、production三個環境。
- boot.rb
載入bundler環境,設定Gemfile中列出的gems,不需要修改。
- [environments]
非Rails核心選項,可依development、production、test環境需求不同設定的選項,會分別放置至以下三個.rb檔案。
- development.rb
- production.rb
- test.rb
- [initializers]
- secret_token.rb
設定簽署Cookie(signed cookies)時需要到的密鑰,可參考 Cookie 文件中的說明。
- session_store.rb
設定使用的session store,可參考 session 原理 文件中的說明。
- wrap_parameters.rb
設定包裹參數功能,可參考 params 與 request 文件中的說明。
- mime_types.rb
設定Rails內建格式支援,可參考 respond_to 與 respond_with 文件中的說明。
- backtrace_silencers.rb
可設定關閉一些程式庫的例外追蹤(backtrace)。
- inflections.rb
在Rails的命名慣例中,常有英文單複數的對照,英文中有些單字不只是加上s就是複數名詞,例如person與people,這個檔案可設定Rails預設外的轉換規則。
- [locales]
放置國際化翻譯詞彙檔案,之後還會介紹。
- en.yml
如果有在進行資料庫維護與修改,db資料夾也是經常接觸:
- [db]
- [migrate]
放置資料庫遷移.rb檔案,可參考 資料庫遷移 文件說明。
- development.sqlite、test.sqlite
新建Rails專案後,預設就會有這兩個sqlite資料庫檔案,分別作為開發與測試時使用的資料庫,如果設定RAILS_ENV環境變數為production,下rake db:create,就會建立production.sqlite,作為實際產品上線時的資料庫。
- schema.rb
記得資料庫遷移至今的結構異動,你不用更動這個檔案,每次資料庫遷移都會自動更新這個檔案,如果你執行rake db:reset,就會刪除資料庫檔案,重建資料庫檔案,然後載入schema.rb中的異動,可參考 Schema Dumping and You 文件的說明。
- seeds.rb
如果你有一些預計要填入資料庫中的資料,可以撰寫在這個檔案中,然後執行rake db:seed就可以了。
還有一些其它資料夾與檔案:
- [doc]
存放程式庫說明文件。
- [lib]
存放可信任的共用類別、模組或相關資產檔案。
- [assets]
- [tasks]
存放Rake任務檔案。
- [log]
存放開發記錄檔。
- development.log
- [public]
可被HTTP公開存取的檔案會放在這個資料夾中。
- [script]
Rails腳本檔案。
- rails
- [test]
測試相關檔案會放在這,可參考 認識 Rails 測試。
- [tmp]
暫存檔案的資料夾。
- [vendor]
廠商、第三方plugin與相關資源。
- config.ru
如果用基於Rake的伺服器啟動應用程式時的設定檔案。
- Gemfile
記錄應用程式使用的Gem。
- Rakefile
記錄可於命令列載入執行的Rake任務。
- README
說明應用程式功能的文件。
存放在app/controllers、app/models等路徑的程式檔案,Rails會依命名慣例(如先前介紹過的控制器、模型等慣例)來載入。Rails的命名實例是檔名為小寫,底線區隔,類別名稱為大小駝峰式命名,例如若程式中使用到XxxYyy類別,會自動至預設路徑中載入xxx_yyy.rb,也就是相當於自動require "xxx_yyy",如果有模組作為名稱空間,例如程式中使用到Ooo::XxxYyy,則會自動至預設路徑中的ooo目錄載入xxx_yyy.rb,也就是相當於自動require "ooo/xxx_yyy"。
如果預設路徑之外,你有其它擺放程式檔案的路徑,可以在application.rb中自行定義config.autoload_paths,例如:
# Custom directories with classes and modules you want to be autoloadable.
config.autoload_paths += %W(#{config.root}/abc #{config.root}/cde)
正如先前看到的,Rails有三種執行環境設定,分別為development環境、test環境與production環境,不同的設定檔是放在config/environments中的development.rb、test.rb與production.rb,根據環境變數RAILS_ENV或RACK_ENV設定為哪一個環境,或是執行rails server時指定-e選項為哪一個環境(像是rails s -e production,如果是Rails Console,則可以指定rails c production),啟動時就會選用哪一個設定檔中的選項,如果必要,也可以自訂環境設定檔,只要在config/environments中有對應名稱的.rb檔就可以了。有關各種選項設定的意義,可以參考 Configuring Rails Applications 文件。