專案環境


當你使用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 文件。