詳細(xì)剖析Ruby on Rails配置文件
通過(guò)對(duì)Ruby on Rails的熟練運(yùn)用,我們可以清楚的知道,Ruby on Rails配置文件都是通過(guò)config文件來(lái)控制的。下面就來(lái)看看Ruby on Rails配置文件的一些相關(guān)知識(shí)。#t#
1. 運(yùn)行時(shí)環(huán)境(Runtime environment)
當(dāng)開(kāi)發(fā)者編寫(xiě)代碼時(shí),需求是多中多樣的。在開(kāi)發(fā)中你可能會(huì)需要很多的登錄,加載變化過(guò)的代碼。在測(cè)試時(shí),你需要各個(gè)系統(tǒng)之間是隔離開(kāi)的。在發(fā)布之前,你可能需要進(jìn)行性能優(yōu)化,并且時(shí)用戶(hù)遠(yuǎn)離bug。
為了支持這一切,Ruby on Rails配置文件的概念。每一個(gè)環(huán)境都擁有自己的一組配置,可以在不同的環(huán)境中運(yùn)行同一個(gè)應(yīng)用程序。
切換運(yùn)行環(huán)境可以使我們不用修改代碼就可以從開(kāi)發(fā)切換到測(cè)試再切換到發(fā)布。怎樣指定運(yùn)行環(huán)境呢?這取決于你怎樣運(yùn)行你的程序,如果你使用了script/server,并且使用了-e參數(shù):
Depot > ruby script/server –e development |test| production
如果你使用apche或者lighttpd,就要設(shè)置RAILS_ENV的環(huán)境變量,我們?cè)诤竺嬖俳榻B。
如果你有特殊的需求,你可以創(chuàng)建自己的環(huán)境(environment),你需要向數(shù)據(jù)庫(kù)配置中添加自己的配置節(jié),并且在config/environment文件夾中添加一個(gè)Ruby on Rails配置文件。
2. 配置數(shù)據(jù)庫(kù)鏈接
文件config/database.yml被用來(lái)配置數(shù)據(jù)庫(kù)鏈接,你會(huì)發(fā)現(xiàn)它包括三個(gè)配置節(jié),每個(gè)配置節(jié)都以環(huán)境名字開(kāi)始,后面緊跟一個(gè)冒號(hào)。下面的行必須縮進(jìn),內(nèi)容時(shí)key和對(duì)應(yīng)的值,兩者之間用冒號(hào)隔開(kāi)。最少的情況下,每個(gè)配置節(jié)必須指定一個(gè)數(shù)據(jù)庫(kù)適配器(database adapter)和使用的數(shù)據(jù)庫(kù),諸如Mysql,Postgres等等。數(shù)據(jù)庫(kù)適配器有自己的特定的配置,完整的列表我們將在后面列出來(lái)。下面時(shí)我們目前depot程序的database.yml文件:
development:
adapter: mysql
database: depot_development
username:
password:
host: localhost
# Warning: The database defined as 'test' will be erased and
# re-generated from your development database when you run 'rake'.
# Do not set this db to the 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
如果你需要在不同的數(shù)據(jù)庫(kù)上運(yùn)行自己的程序,你需要有一組Ruby on Rails配置文件,如果僅僅是數(shù)據(jù)庫(kù)鏈接有不同,你可以在database.yml中創(chuàng)建多個(gè)配置節(jié),配置節(jié)的名字由環(huán)境名和數(shù)據(jù)庫(kù)名字組成,并且在yaml文件中指定配置節(jié),例如下面這樣:
# Change the following line 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
如果改變數(shù)據(jù)庫(kù)的同時(shí)還改變了程序配置的其他地方,你可以在database.yml文件里創(chuàng)建多組配置,同時(shí),還需要在environment目錄下添加對(duì)應(yīng)的文件。
3. 環(huán)境(environment)
一個(gè)Rails程序的運(yùn)行時(shí)配置(Runtime configuration)由兩個(gè)文件完成,一個(gè)是config/environment.rb,并不依賴(lài)于具體環(huán)境。第二個(gè)文件依賴(lài)于環(huán)境,Rails根據(jù)當(dāng)前的環(huán)境名在config/environment目錄里查找對(duì)應(yīng)的文件,并且在處理environment.rb的時(shí)候加載這個(gè)文件。標(biāo)準(zhǔn)的三種環(huán)境作為默認(rèn)配置已經(jīng)包含了,我們可以在config/environment目錄下看到三個(gè)文件:development.rb,production.rb,test.rb,如果有特殊的環(huán)境要求,我們可以在這里添加Ruby on Rails配置文件。
典型的環(huán)境文件(Environment files)主要作下面的事情:
設(shè)置Ruby的加載路徑,這樣你的程序就知道到哪里加載Model或者View了。
創(chuàng)建程序所用到的一些資源,比如Log。
提供一組配置設(shè)置,不但時(shí)給Rails,也是給我們的程序。
4. 加載路徑(Load Path)
標(biāo)準(zhǔn)的配置環(huán)境下,會(huì)自動(dòng)加載下面的目錄到程序的加載路徑(Load Path)中:
Test/mocks/environment,在這里定義的類(lèi)會(huì)覆蓋掉真正的版本,可以使我們?cè)跍y(cè)試時(shí)使用一些樁代碼,在前面我們已經(jīng)介紹過(guò)。
App/model目錄下所有以小寫(xiě)字母開(kāi)頭和包含有下劃線的文件和組件。
目錄app,app/models,app/controllers,app/helpers,app/apis,components,config,lib,vendor,和vendor/Rails/*。
5. 程序范圍內(nèi)的資源(Application-wide Resource)
Environment.rb文件創(chuàng)建一個(gè)Logger來(lái)向log/environment.log文件中記錄信息,并且設(shè)置這個(gè)logger給Active Record,Action Controller,Action Mailer,除非你的Ruby on Rails配置文件已經(jīng)給這些部件設(shè)置了自己的Logger。
Enbironment.rb文件還告訴Action Controller和Action Mailer使用app/views作為查找模板(Template)時(shí)的開(kāi)始點(diǎn)。同時(shí),也可以被環(huán)境指定的配置(environment-specific configurations)所覆蓋。
6. 配置參數(shù)(Configuration Parameters)
對(duì)于Action Controller,Action Pack,Action Mailer,Test Case等有一些特殊的Ruby on Rails配置文件,在書(shū)上的附錄B,這部分我想就放到后面研究每一個(gè)主題時(shí)在學(xué)習(xí)吧。


















