锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 鐜版潵璇碦ails閲岄潰濡備綍鍔犺澆config鐨勫惂銆?/p>
鍦╦ava閲岄潰config緇濆鏄竴涓猺esource鏂囦歡錛岀劧鍚庨氳繃璇誨彇閰嶇疆鐨勫伐鍏峰姞鍏ヨ繘鏉ワ紝鍦ㄥ垎鏋愬鐞嗐?/p>
鍦≧OR閲岄潰瀹屽叏涓嶆槸榪欎箞鍥炰簨銆?/p>
1.棣栧厛澶у瑕佷簡瑙g殑鏄紝鍦ㄦ垜浠惎鍔?ruby script/server 鐨勬椂鍊欙紝rails鍋氫簡涓緋誨垪鐨勫鐞嗭紝鏈鍚庝粬鎵ц浜?font face="Arial">environment.rb 榪欓噷鐨刢onfig鍏跺疄鏄疘nitializer鍐呴儴鐨勪竴涓彉閲忥紝鎺屾帶鍏ㄥ眬鐨勯厤緗俊鎭紝鎴戜滑鍙互浣跨敤榪欎釜config鏉ラ厤緗垜浠兂瑕佺殑銆?span>Rails::Initializer.run鐨勬簮鐮佹槸榪欐牱鐨勶紝yield鍐嶄竴嬈℃樉紺轟簡浠栫殑濞佸姏錛岃鎴戜滑鍦ㄩ厤緗枃浠朵腑寰椾互閰嶇疆config銆傜劧鍚庡疄渚嬪寲浜嗕竴涓猧nitializer聽涔嬪悗錛屾妸config浣滀負鍙傛暟浼犲叆浜嗐?/span> 鎴戜滑鎺ョ潃寰涓嬭蛋錛屽彲浠ョ湅鍒癷nitializer聽鍋氫簡涓緋誨垪鐨勫垵濮嬪寲宸ヤ綔錛屽寘鎷琹oad_path鐨勮瀹氾紝璺敱鐨勫垵濮嬪寲錛屽拰activerecord鐨勫垵濮嬪寲銆傛垜浠叧蹇冪殑榪樻槸閰嶇疆濡備綍璧蜂綔鐢紝閭d箞鏉ョ湅鐪?font face="Arial">environments鐩綍涓嬮潰鐨勯厤緗枃浠舵槸濡備綍瀵煎叆鐨勫惂銆?/font>
IO.read(configuration.environment_path) 錛岋紝榪欓噷灝變笉浣跨敤浠涔堝洖璋冧笉鍥炶皟浜嗭紝鑰屾槸騫茶剢IO鎷垮嚭鏉val涓鎶婏紝榪欓噷涔熸槸鍚冧簡涓鎯婏紝榪欐牱涔熷彲浠ュ憖~~~~~~~鐒跺悗錛屾垜浠彲浠ョ湅鐪嬶紝浠栧鐞嗗父閲忕殑鏂規硶錛屾妸鑷繁閰嶇疆鏂囦歡涓殑甯擱噺鍏ㄩ儴鏀懼叆Object閲岄潰錛岃搗鍒板叏灞甯擱噺鐨勭洰鐨勩?/span>
鏈緇濈殑榪樻槸initialize_framework_settings錛屼嬌鐢ㄤ簡鏈変竴涓猺uby鐨勬妧宸с?/font>
configuration.frameworks閲岄潰瀛樻斁鐨勬槸rails涓釜緇勪歡鐨勫悕瀛楋紝姣旀柟璇碼ctive_record涔嬬被銆傜劧鍚庢妸榪欎釜鍚嶅瓧澶у啓杞崲錛岀劧鍚庣敤constantize鍙栧緱ActiveRecord榪欎釜Module(娉ㄦ剰錛岃繖浜涗笢瑗塊兘鍦╝ctivesupport閲岄潰鍛紝activesupport/lib/active_support/core_ext/string/inflections.rb )銆傜劧鍚庣敤const_get鍙栧緱榪欎釜妯″潡鐨凚ase綾伙紝涔熷氨鏄疉ctiveRecord::Base榪欎釜綾諱簡錛堜笅闈㈤兘鍙仛Base綾伙級錛屾墍鏈夌殑Rails鐨勭粍浠墮兘鏄繖涓懡鍚嶈鍒欐敼澶╂垜浠嚜宸辨兂瑕佸仛涓涓猂ails鐨勭粍浠跺姞榪涙潵錛屼篃鍙互榪欐牱錛堜絾鏄紼嶅井淇敼涓涓簮鐮侊級銆?/p>
鐒跺悗錛屾垜浠惂config閲岄潰鐨勫唴瀹圭粰Base綾匯俢onfiguration.send(framework)鏄皟鐢ㄤ竴涓粍浠跺悕縐扮殑鏂規硶錛屾瘮鏂硅active_record錛屽氨鏄幓鐨刢onfig閲岄潰鐨刟ctive_record灞炴э紙榪欐槸鏈鍩烘湰鐨勶級錛岄氳繃鍚庨潰鐨刣o鎴戜滑鍙互鐪嬪埌config榪斿洖鐨勬槸涓涓猦ash錛岀劧鍚庢妸hash涓瘡涓涓猭ey浣滀負鍙橀噺錛寁alue涓轟紶鍏ュ鹼紝浼犲叆Base綾匯傘傘傝繖閲屽ぇ瀹跺簲璇ユ病浠涔堥棶棰樹簡錛岀湅鐪嬫垜浠殑config鏂囦歡鏄庝箞鍐欑殑鍚с?/p>
鍝︼紝鐪嬬潃寰堟檿鍚э紝config灝辨槸鎴戜滑鐨勯厤緗璞★紝鎸夌収鎴戜滑涓婇潰鐨勮娉曪紝config.action_view涔嬬被framework鐨勫彉閲忓簲璇ユ槸涓涓猦ash鎵嶅鍛錛屽鏋滄槸hash鐨勮瘽錛屼笉搴旇鐢ㄨ繖鏍風殑鏂瑰紡浼犲叆錛屽彲鑳戒細鐢?config.action_view = {:debug_rjs => true}鏉ヤ紶鍏ャ?/p>
OK.鎴戜滑鏉ョ湅榪欎釜鍙橀噺鍒板簳鏄粈涔堟牱鐨刪ash銆?/p>
鍦ㄥ垵濮嬪寲榪欎簺鍙橀噺鐨勬椂鍊欙紝Rails緇欎粬璧嬪間負OrderedOptions.new銆傝繖涓壒孌婄殑綾誨瀷鍙兘灝辨槸鍏抽敭銆?/span> 鐪嬪埌鍏朵腑鐨勭巹濡欎簡涔堬紝method_missing~~~錛侊紒 濡傛灉璋冪敤涓涓?*=鐨勬柟娉?錛屽氨鍍忓綋鐢ㄤ紶鍏ヤ竴涓狧ASH鐨勫鹼紝key灝辨槸鏂規硶鐨勫悕瀛椼?/p>
涔熷氨鏄細config.action_view.debug_rjs聽聽=聽true聽鐩稿綋浜?span>config.action_view[:debug_rjs] = true
Rails::Initializer.run聽do聽
|
config
|
聽聽聽聽
聽聽
#
聽榪欓噷鑳芥彃鍏ユ垜浠嚜宸辯殑閰嶇疆銆偮犅犅犅?/span>
聽聽
#
聽config.聽涔嬬被聽聽聽聽
end聽聽聽
def
聽self.run(command聽
=
聽:process,聽configuration聽
=
聽Configuration.new)聽聽聽聽
聽聽
yield
聽configuration聽
if
聽block_given?聽聽聽聽
聽聽initializer聽
=
聽new聽configuration聽聽聽聽
聽聽initializer.send(command)聽聽聽聽
聽聽initializer聽聽聽聽
end聽聽聽
def
聽load_environment聽聽聽聽
聽聽silence_warnings聽do聽聽聽
聽聽聽聽config聽
=
聽configuration聽聽聽聽
聽聽聽聽constants聽
=
聽self.
class
.constants聽聽聽聽
聽聽聽聽eval(IO.read(configuration.environment_path),聽binding)聽聽聽聽
聽聽聽聽(self.
class
.constants聽
-
聽constants).each聽do聽
|
const
|
聽聽聽聽
聽聽聽聽聽聽Object.const_set(const,聽self.
class
.const_get(const))聽聽聽聽
聽聽聽聽end聽聽聽
聽聽end聽聽聽
end聽聽聽
def
聽initialize_framework_settings聽聽聽聽
聽聽configuration.frameworks.each聽do聽
|
framework
|
聽聽聽聽
聽聽聽聽base_class聽
=
聽framework.to_s.camelize.constantize.const_get(
"
Base
"
)聽聽聽聽
聽聽聽
聽聽聽聽configuration.send(framework).each聽do聽
|
setting,聽value
|
聽聽聽聽
聽聽聽聽聽聽base_class.send(
"
#{setting}=
"
,聽value)聽聽聽聽
聽聽聽聽end聽聽聽
聽聽end聽聽聽
end聽聽聽
#
聽Settings聽specified聽here聽will聽take聽precedence聽over聽those聽in聽config/environment.rb聽聽聽聽
聽聽聽
#
聽In聽the聽development聽environment聽your聽application's聽code聽is聽reloaded聽on聽聽聽聽
#
聽every聽request.聽聽This聽slows聽down聽response聽time聽but聽is聽perfect聽for聽development聽聽聽聽
#
聽since聽you聽don't聽have聽to聽restart聽the聽webserver聽when聽you聽make聽code聽changes.聽聽聽聽
config.cache_classes聽
=
聽false聽聽聽
聽聽聽
#
聽Log聽error聽messages聽when聽you聽accidentally聽call聽methods聽on聽nil.聽聽聽聽
config.whiny_nils聽
=
聽true聽聽聽
聽聽聽
#
聽Enable聽the聽breakpoint聽server聽that聽script/breakpointer聽connects聽to聽聽聽聽
config.breakpoint_server聽
=
聽true聽聽聽
聽聽聽
#
聽Show聽full聽error聽reports聽and聽disable聽caching聽聽聽聽
config.action_controller.consider_all_requests_local聽
=
聽true聽聽聽
config.action_controller.perform_caching聽聽聽聽聽聽聽聽聽聽聽聽聽
=
聽false聽聽聽
config.action_view.cache_template_extensions聽聽聽聽聽聽聽聽聽
=
聽false聽聽聽
config.action_view.debug_rjs聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
=
聽true聽聽聽
聽聽聽
#
聽Don't聽care聽if聽the聽mailer聽can't聽send聽聽聽聽
config.action_mailer.raise_delivery_errors聽
=
聽false聽聽聽
def
聽initialize聽聽聽聽
聽聽
.聽聽聽聽
聽聽
.聽聽聽聽
聽聽
for
聽framework聽
in
聽default_frameworks聽聽聽聽
聽聽聽聽self.send(
"
#{framework}=
"
,聽OrderedOptions.new)聽聽聽聽
聽聽end聽聽聽
end聽聽聽
class
聽OrderedOptions聽
<
聽OrderedHash聽
#
:nodoc:聽聽聽聽
聽聽
def
聽[]
=
(key,聽value)聽聽聽聽
聽聽聽聽super(key.to_sym,聽value)聽聽聽聽
聽聽end聽聽聽
聽聽聽聽聽聽
聽聽
def
聽[](key)聽聽聽聽
聽聽聽聽super(key.to_sym)聽聽聽聽
聽聽end聽聽聽
聽聽聽
聽聽
def
聽method_missing(name,聽
*
args)聽聽聽聽
聽聽聽聽
if
聽name.to_s聽
=~
聽
/
(.
*
)
=
$
/
聽聽聽聽
聽聽聽聽聽聽self[$
1
.to_sym]聽
=
聽args.first聽聽聽聽
聽聽聽聽
else
聽聽聽
聽聽聽聽聽聽self[name]聽聽聽聽
聽聽聽聽end聽聽聽
聽聽end聽聽聽
end聽聽聽
OK 錛屽ぇ浣撲笂鎻忚堪浜嗕竴涓嬶紝鍙互鐪嬪埌綆鍗曠殑涓涓猂ails鍒濆鍖栧凡緇忕粰鎴戜滑灞曠ず浜嗗嚑涔庡叏閮╮uby鐨勯潛涓戒箣澶勶紝榪欒兘璇存槑錛岃繖涓寒鐐硅偗瀹氭槸璐┛rails鐨勫熀鏈紝鍦ㄤ互鍚庣殑娣卞叆鐮旂┒涓垜浠氨鑳界湅鍒頒簡銆?/span>