Rails的運行時配置是由config目錄下的文件來控制的。
1. 運行時環境(Runtime environment)
當開發者編寫代碼時,需求是多中多樣的。在開發中你可能會需要很多的登錄,加載變化過的代碼。在測試時,你需要各個系統之間是隔離開的。在發佈之前,你可能需要進行性能優化,並且時用戶遠離bug。
爲了支持這一切,Rials有運行時配置的概念。每一個環境都擁有自己的一組配置,可以在不同的環境中運行同一個應用程序。
切換運行環境可以使我們不用修改代碼就可以從開發切換到測試再切換到發佈。怎樣指定運行環境呢?這取決於你怎樣運行你的程序,如果你使用了script/server,並且使用了-e參數:
Depot > ruby script/server –e development|test| production
如果你使用apche或者lighttpd,就要設置RAILS_ENV的環境變量,我們在後面再介紹。
如果你有特殊的需求,你可以創建自己的環境(environment),你需要向數據庫配置中添加自己的配置節,並且在config/environment文件夾中添加一個配置文件。
2. 配置數據庫鏈接
文件config/database.yml被用來配置數據庫鏈接,你會發現它包括三個配置節,每個配置節都以環境名字開始,後面緊跟一個冒號。下面的行必須縮進,內容時key和對應的值,兩者之間用冒號隔開。最少的情況下,每個配置節必須指定一個數據庫適配器(database adapter)和使用的數據庫,諸如Mysql,Postgres等等。數據庫適配器有自己的特定的配置,完整的列表我們將在後面列出來。下面時我們目前depot程序的database.yml文件:
development:
adapter: mysql
database: depot_development
username:
password:
host: localhost
# Warning: The databasedefined as 'test' will be erased and
# re-generated from yourdevelopment database when you run 'rake'.
# Do not set this db tothe same as development or production.
test:
adapter: mysql
database: depot_test
username:
password:
host: localhost
production:
adapter: mysql
database: depot_production
username: root
password: prod
host: wibble
如果你需要在不同的數據庫上運行自己的程序,你需要有一組配置,如果僅僅是數據庫鏈接有不同,你可以在database.yml中創建多個配置節,配置節的名字由環境名和數據庫名字組成,並且在yaml文件中指定配置節,例如下面這樣:
# Change the followingline to point to the right database
development:development_sqlite
development_mysql:
adapter: mysql
database: depot_development
host: localhost
username:
password:
development_sqlite:
adapter: sqlite
dbfile: my_db
如果改變數據庫的同時還改變了程序配置的其他地方,你可以在database.yml文件裏創建多組配置,同時,還需要在environment目錄下添加對應的文件。
3. 環境(environment)
一個Rails程序的運行時配置(Runtimeconfiguration)由兩個文件完成,一個是config/environment.rb,並不依賴於具體環境。第二個文件依賴於環境,Rails根據當前的環境名在config/environment目錄裏查找對應的文件,並且在處理environment.rb的時候加載這個文件。標準的三種環境作爲默認配置已經包含了,我們可以在config/environment目錄下看到三個文件:development.rb,production.rb,test.rb,如果有特殊的環境要求,我們可以在這裏添加配置文件。
典型的環境文件(Environment files)主要作下面的事情:
l 設置Ruby的加載路徑,這樣你的程序就知道到哪裏加載Model或者View了。
l 創建程序所用到的一些資源,比如Log。
l 提供一組配置設置,不但時給Rails,也是給我們的程序。
4. 加載路徑(LoadPath)
標準的配置環境下,會自動加載下面的目錄到程序的加載路徑(Load Path)中:
l Test/mocks/environment,在這裏定義的類會覆蓋掉真正的版本,可以使我們在測試時使用一些樁代碼,在前面我們已經介紹過。
l App/model目錄下所有以小寫字母開頭和包含有下劃線的文件和組件。
l 目錄app,app/models,app/controllers,app/helpers,app/apis,components,config,lib,vendor,和vendor/Rails/*。
5. 程序範圍內的資源(Application-wide Resource)
Environment.rb文件創建一個Logger來向log/environment.log文件中記錄信息,並且設置這個logger給Active Record,ActionController,Action Mailer,除非你的環境配置文件已經給這些部件設置了自己的Logger。
Enbironment.rb文件還告訴Action Controller和ActionMailer使用app/views作爲查找模板(Template)時的開始點。同時,也可以被環境指定的配置(environment-specific configurations)所覆蓋。
6. 配置參數(ConfigurationParameters)
對於Action Controller,ActionPack,Action Mailer,TestCase等有一些特殊的配置,在書上的附錄B,這部分我想就放到後面研究每一個主題時在學習吧。