ï»??xml version="1.0" encoding="utf-8" standalone="yes"?> ç°æ¥è¯ŽRailséé¢åŠäœå è²configçå§ã?/p>
åšjavaéé¢configŸl对æ¯äžäžªresourceæägåQç¶åéè¿è¯Õdé
眮çå·¥å
·å å
¥è¿æ¥ïŒåšåæå€çã?/p>
åšRORéé¢å®å
šäžæ¯qä¹åäºã?/p>
1.éŠå
倧家èŠäº(jiš£n)è§£çæ¯ïŒåšæä»¬å¯å?ruby script/server çæ¶åïŒrailsåäº(jiš£n)䞟pÕdçå€çïŒæå仿§è¡äº?font face="Arial">environment.rb qéçconfigå
¶å®æ¯Initializerå
éšçäžäžªåéïŒææ§å
šå±çé
Ÿ|®ä¿¡æ¯ïŒæä»¬å¯ä»¥äœ¿çšq䞪configæ¥é
Ÿ|®æä»¬æ³èŠçã?span>Rails::Initializer.runçæºç æ¯qæ ·çïŒyieldåäžÆ¡æŸœCÞZº(jiš£n)ä»çåšååQ让æä»¬åšé
Ÿ|®æä»¶äžåŸä»¥é
眮configãç¶åå®äŸåäº?jiš£n)äžäžªinitializer (tš©ng)ä¹ååQæconfigäœäØ(fšŽ)åæ°äŒ å
¥äº?jiš£n)ã?/span> æä»¬æ¥çåŸäžèµ°åQå¯ä»¥çå°initializer (tš©ng)åäº(jiš£n)䞟pÕdçåå§åå·¥äœåQå
æ¬load_pathç讟å®ïŒè·¯ç±çåå§ååQåactiverecordçåå§åãæä»¬å
³å¿?jš©)çqæ¯é
眮åŠäœèµ·äœçšïŒé£ä¹æ¥çç?font face="Arial">environmentsç®åœäžé¢çé
Ÿ|®æä»¶æ¯åŠäœå¯Œå
¥çå§ã?/font>
IO.read(configuration.environment_path) åQïŒqé®×žäœ¿çšä»ä¹åè°äžåè°äº?jiš£n)ïŒèæ¯òq²èIOæ¿åºæ¥evaläžæïŒqé乿¯åäº(jiš£n)äžæïŒqæ ·ä¹å¯ä»¥å~~~~~~~ç¶ååQæä»¬å¯ä»¥ççïŒä»å€çåžžéçæÒ(guš©)³åQæèªå·±é
眮æägäžçåžRå
šéšæÖ
¥Objectéé¢åQèvå°å
šå±åžRçç®çã?/span>
æŸlçqæ¯initialize_framework_settingsåQäÉçšäº(jiš£n)æäžäžªrubyçæå·§ã?/font>
configuration.frameworkséé¢åæŸçæ¯rails䞪䞪ŸlägçååïŒæ¯æ¹è¯Žactive_recordä¹ç±»ãç¶åæq䞪åå倧å蜬æ¢åQç¶åçšconstantizeååŸActiveRecordq䞪Module(泚æåQè¿äºäžè¥Kœåšactivesupportéé¢å¢ïŒactivesupport/lib/active_support/core_ext/string/inflections.rb )ãç¶åçšconst_getååŸq䞪暡åçBaseŸc»ïŒä¹å°±æ¯ActiveRecord::Baseq䞪ŸcÖMº(jiš£n)åQäžé¢éœå«åBaseŸc»ïŒ(jšª)åQææçRailsçç»ä»œæ¯è¿äžªåœåè§åæ¹å€©æä»¬èªå·±æ³èŠåäžäžªRailsçç»ä»¶å qæ¥åQä¹å¯ä»¥qæ ·åQäœæ¯èŠœE埮修æ¹äžäžªæºç ïŒ(jšª)ã?/p>
ç¶ååQæä»¬å§configéé¢çå
容ç»BaseŸc
Rconfiguration.send(framework)æ¯è°çšäžäžªç»ä»¶å¿U°çæÒ(guš©)³åQæ¯æ¹è¯Žactive_recordåQå°±æ¯å»çconfigéé¢çactive_record屿§ïŒqæ¯æåºæ¬çïŒ(jšª)åQéè¿åé¢çdoæä»¬å¯ä»¥çå°configqåçæ¯äžäžªhashåQç¶åæhashäžæ¯äžäžªkeyäœäØ(fšŽ)åéåQvalueäžÞZŒ å
¥åû|ŒäŒ å
¥BaseŸc
Rããè¿é倧家åºè¯¥æ²¡ä»ä¹é®é¢äº(jiš£n)åQççæä»¬çconfigæägæ¯æä¹åçå§ã?/p>
åŠïŒççåŸæå§ïŒconfig®±æ¯æä»¬çé
Ÿ|®å¯¹è±¡ïŒæç
§æä»¬äžé¢ç诎æ³ïŒconfig.action_viewä¹ç±»frameworkçåéåºè¯¥æ¯äžäžªhashæå¯¹ååQåŠææ¯hashçè¯åQäžåºè¯¥çšè¿æ ïL(fš¥ng)æ¹åŒäŒ å
¥åQå¯èœäŒ(xš¬)ç?config.action_view = {:debug_rjs => true}æ¥äŒ å
¥ã?/p>
OK.æä»¬æ¥çq䞪åéå°åºæ¯ä»ä¹æ ·çhashã?/p>
åšåå§åqäºåéçæ¶åïŒRailsŸlä»èµåégØ(fšŽ)OrderedOptions.newãè¿äžªç¹DçŸcÕdå¯èœ®±æ¯å
³é®ã?/span> çå°å
¶äžççåŠäº(jiš£n)ä¹ïŒmethod_missing~~~åQïŒ åŠæè°çšäžäž?*=çæ¹æ³?åQå°±ååœçšäŒ å
¥äžäžªHASHçåû|Œkey®±æ¯æÒ(guš©)³çååã?/p>
ä¹å°±æ¯ïŒ(xš¬)config.action_view.debug_rjs (tš©ng) (tš©ng)= (tš©ng)true (tš©ng)çžåœäº?span>config.action_view[:debug_rjs] = true
Rails::Initializer.run (tš©ng)do (tš©ng)
|
config
|
 (tš©ng) (tš©ng) (tš©ng) (tš©ng)
 (tš©ng) (tš©ng)
#
 (tš©ng)qéèœæå
¥æä»¬èªå·Þqé
眮ãÂ?tš©ng) (tš©ng) (tš©ng)?/span>
 (tš©ng) (tš©ng)
#
 (tš©ng)config. (tš©ng)ä¹ç±»Â (tš©ng) (tš©ng) (tš©ng) (tš©ng)
end (tš©ng) (tš©ng) (tš©ng)
def
 (tš©ng)self.run(command (tš©ng)
=
 (tš©ng):process, (tš©ng)configuration (tš©ng)
=
 (tš©ng)Configuration.new) (tš©ng) (tš©ng) (tš©ng) (tš©ng)
 (tš©ng) (tš©ng)
yield
 (tš©ng)configuration (tš©ng)
if
 (tš©ng)block_given? (tš©ng) (tš©ng) (tš©ng) (tš©ng)
 (tš©ng) (tš©ng)initializer (tš©ng)
=
 (tš©ng)new (tš©ng)configuration (tš©ng) (tš©ng) (tš©ng) (tš©ng)
 (tš©ng) (tš©ng)initializer.send(command) (tš©ng) (tš©ng) (tš©ng) (tš©ng)
 (tš©ng) (tš©ng)initializer (tš©ng) (tš©ng) (tš©ng) (tš©ng)
end (tš©ng) (tš©ng) (tš©ng)
def
 (tš©ng)load_environment (tš©ng) (tš©ng) (tš©ng) (tš©ng)
 (tš©ng) (tš©ng)silence_warnings (tš©ng)do (tš©ng) (tš©ng) (tš©ng)
 (tš©ng) (tš©ng) (tš©ng) (tš©ng)config (tš©ng)
=
 (tš©ng)configuration (tš©ng) (tš©ng) (tš©ng) (tš©ng)
 (tš©ng) (tš©ng) (tš©ng) (tš©ng)constants (tš©ng)
=
 (tš©ng)self.
class
.constants (tš©ng) (tš©ng) (tš©ng) (tš©ng)
 (tš©ng) (tš©ng) (tš©ng) (tš©ng)eval(IO.read(configuration.environment_path), (tš©ng)binding) (tš©ng) (tš©ng) (tš©ng) (tš©ng)
 (tš©ng) (tš©ng) (tš©ng) (tš©ng)(self.
class
.constants (tš©ng)
-
 (tš©ng)constants).each (tš©ng)do (tš©ng)
|
const
|
 (tš©ng) (tš©ng) (tš©ng) (tš©ng)
 (tš©ng) (tš©ng) (tš©ng) (tš©ng) (tš©ng) (tš©ng)Object.const_set(const, (tš©ng)self.
class
.const_get(const)) (tš©ng) (tš©ng) (tš©ng) (tš©ng)
 (tš©ng) (tš©ng) (tš©ng) (tš©ng)end (tš©ng) (tš©ng) (tš©ng)
 (tš©ng) (tš©ng)end (tš©ng) (tš©ng) (tš©ng)
end (tš©ng) (tš©ng) (tš©ng)
def
 (tš©ng)initialize_framework_settings (tš©ng) (tš©ng) (tš©ng) (tš©ng)
 (tš©ng) (tš©ng)configuration.frameworks.each (tš©ng)do (tš©ng)
|
framework
|
 (tš©ng) (tš©ng) (tš©ng) (tš©ng)
 (tš©ng) (tš©ng) (tš©ng) (tš©ng)base_class (tš©ng)
=
 (tš©ng)framework.to_s.camelize.constantize.const_get(
"
Base
"
) (tš©ng) (tš©ng) (tš©ng) (tš©ng)
 (tš©ng) (tš©ng) (tš©ng)
 (tš©ng) (tš©ng) (tš©ng) (tš©ng)configuration.send(framework).each (tš©ng)do (tš©ng)
|
setting, (tš©ng)value
|
 (tš©ng) (tš©ng) (tš©ng) (tš©ng)
 (tš©ng) (tš©ng) (tš©ng) (tš©ng) (tš©ng) (tš©ng)base_class.send(
"
#{setting}=
"
, (tš©ng)value) (tš©ng) (tš©ng) (tš©ng) (tš©ng)
 (tš©ng) (tš©ng) (tš©ng) (tš©ng)end (tš©ng) (tš©ng) (tš©ng)
 (tš©ng) (tš©ng)end (tš©ng) (tš©ng) (tš©ng)
end (tš©ng) (tš©ng) (tš©ng)
#
 (tš©ng)Settings (tš©ng)specified (tš©ng)here (tš©ng)will (tš©ng)take (tš©ng)precedence (tš©ng)over (tš©ng)those (tš©ng)in (tš©ng)config/environment.rb (tš©ng) (tš©ng) (tš©ng) (tš©ng)
 (tš©ng) (tš©ng) (tš©ng)
#
 (tš©ng)I(yšªng)n (tš©ng)the (tš©ng)development (tš©ng)environment (tš©ng)your (tš©ng)application's (tš©ng)code (tš©ng)is (tš©ng)reloaded (tš©ng)on (tš©ng) (tš©ng) (tš©ng) (tš©ng)
#
 (tš©ng)every (tš©ng)request. (tš©ng) (tš©ng)This (tš©ng)slows (tš©ng)down (tš©ng)response (tš©ng)time (tš©ng)but (tš©ng)is (tš©ng)perfect (tš©ng)for (tš©ng)development (tš©ng) (tš©ng) (tš©ng) (tš©ng)
#
 (tš©ng)since (tš©ng)you (tš©ng)don't (tš©ng)have (tš©ng)to (tš©ng)restart (tš©ng)the (tš©ng)webserver (tš©ng)when (tš©ng)you (tš©ng)make (tš©ng)code (tš©ng)changes. (tš©ng) (tš©ng) (tš©ng) (tš©ng)
config.cache_classes (tš©ng)
=
 (tš©ng)false (tš©ng) (tš©ng) (tš©ng)
 (tš©ng) (tš©ng) (tš©ng)
#
 (tš©ng)Log (tš©ng)error (tš©ng)messages (tš©ng)when (tš©ng)you (tš©ng)accidentally (tš©ng)call (tš©ng)methods (tš©ng)on (tš©ng)nil. (tš©ng) (tš©ng) (tš©ng) (tš©ng)
config.whiny_nils (tš©ng)
=
 (tš©ng)true (tš©ng) (tš©ng) (tš©ng)
 (tš©ng) (tš©ng) (tš©ng)
#
 (tš©ng)Enable (tš©ng)the (tš©ng)breakpoint (tš©ng)server (tš©ng)that (tš©ng)script/breakpointer (tš©ng)connects (tš©ng)to (tš©ng) (tš©ng) (tš©ng) (tš©ng)
config.breakpoint_server (tš©ng)
=
 (tš©ng)true (tš©ng) (tš©ng) (tš©ng)
 (tš©ng) (tš©ng) (tš©ng)
#
 (tš©ng)Show (tš©ng)full (tš©ng)error (tš©ng)reports (tš©ng)and (tš©ng)disable (tš©ng)caching (tš©ng) (tš©ng) (tš©ng) (tš©ng)
config.action_controller.consider_all_requests_local (tš©ng)
=
 (tš©ng)true (tš©ng) (tš©ng) (tš©ng)
config.action_controller.perform_caching (tš©ng) (tš©ng) (tš©ng) (tš©ng) (tš©ng) (tš©ng) (tš©ng) (tš©ng) (tš©ng) (tš©ng) (tš©ng) (tš©ng) (tš©ng)
=
 (tš©ng)false (tš©ng) (tš©ng) (tš©ng)
config.action_view.cache_template_extensions (tš©ng) (tš©ng) (tš©ng) (tš©ng) (tš©ng) (tš©ng) (tš©ng) (tš©ng) (tš©ng)
=
 (tš©ng)false (tš©ng) (tš©ng) (tš©ng)
config.action_view.debug_rjs (tš©ng) (tš©ng) (tš©ng) (tš©ng) (tš©ng) (tš©ng) (tš©ng) (tš©ng) (tš©ng) (tš©ng) (tš©ng) (tš©ng) (tš©ng) (tš©ng) (tš©ng) (tš©ng) (tš©ng) (tš©ng) (tš©ng) (tš©ng) (tš©ng) (tš©ng) (tš©ng) (tš©ng) (tš©ng)
=
 (tš©ng)true (tš©ng) (tš©ng) (tš©ng)
 (tš©ng) (tš©ng) (tš©ng)
#
 (tš©ng)Don't (tš©ng)care (tš©ng)if (tš©ng)the (tš©ng)mailer (tš©ng)can't (tš©ng)send (tš©ng) (tš©ng) (tš©ng) (tš©ng)
config.action_mailer.raise_delivery_errors (tš©ng)
=
 (tš©ng)false (tš©ng) (tš©ng) (tš©ng)
def
 (tš©ng)initialize (tš©ng) (tš©ng) (tš©ng) (tš©ng)
 (tš©ng) (tš©ng)
. (tš©ng) (tš©ng) (tš©ng) (tš©ng)
 (tš©ng) (tš©ng)
. (tš©ng) (tš©ng) (tš©ng) (tš©ng)
 (tš©ng) (tš©ng)
for
 (tš©ng)framework (tš©ng)
in
 (tš©ng)default_frameworks (tš©ng) (tš©ng) (tš©ng) (tš©ng)
 (tš©ng) (tš©ng) (tš©ng) (tš©ng)self.send(
"
#{framework}=
"
, (tš©ng)OrderedOptions.new) (tš©ng) (tš©ng) (tš©ng) (tš©ng)
 (tš©ng) (tš©ng)end (tš©ng) (tš©ng) (tš©ng)
end (tš©ng) (tš©ng) (tš©ng)
class
 (tš©ng)OrderedOptions (tš©ng)
<
 (tš©ng)OrderedHash (tš©ng)
#
:nodoc: (tš©ng) (tš©ng) (tš©ng) (tš©ng)
 (tš©ng) (tš©ng)
def
 (tš©ng)[]
=
(key, (tš©ng)value) (tš©ng) (tš©ng) (tš©ng) (tš©ng)
 (tš©ng) (tš©ng) (tš©ng) (tš©ng)super(key.to_sym, (tš©ng)value) (tš©ng) (tš©ng) (tš©ng) (tš©ng)
 (tš©ng) (tš©ng)end (tš©ng) (tš©ng) (tš©ng)
 (tš©ng) (tš©ng) (tš©ng) (tš©ng) (tš©ng) (tš©ng)
 (tš©ng) (tš©ng)
def
 (tš©ng)[](key) (tš©ng) (tš©ng) (tš©ng) (tš©ng)
 (tš©ng) (tš©ng) (tš©ng) (tš©ng)super(key.to_sym) (tš©ng) (tš©ng) (tš©ng) (tš©ng)
 (tš©ng) (tš©ng)end (tš©ng) (tš©ng) (tš©ng)
 (tš©ng) (tš©ng) (tš©ng)
 (tš©ng) (tš©ng)
def
 (tš©ng)method_missing(name, (tš©ng)
*
args) (tš©ng) (tš©ng) (tš©ng) (tš©ng)
 (tš©ng) (tš©ng) (tš©ng) (tš©ng)
if
 (tš©ng)name.to_s (tš©ng)
=~
 (tš©ng)
/
(.
*
)
=
$
/
 (tš©ng) (tš©ng) (tš©ng) (tš©ng)
 (tš©ng) (tš©ng) (tš©ng) (tš©ng) (tš©ng) (tš©ng)self[$
1
.to_sym] (tš©ng)
=
 (tš©ng)args.first (tš©ng) (tš©ng) (tš©ng) (tš©ng)
 (tš©ng) (tš©ng) (tš©ng) (tš©ng)
else
 (tš©ng) (tš©ng) (tš©ng)
 (tš©ng) (tš©ng) (tš©ng) (tš©ng) (tš©ng) (tš©ng)self[name] (tš©ng) (tš©ng) (tš©ng) (tš©ng)
 (tš©ng) (tš©ng) (tš©ng) (tš©ng)end (tš©ng) (tš©ng) (tš©ng)
 (tš©ng) (tš©ng)end (tš©ng) (tš©ng) (tš©ng)
end (tš©ng) (tš©ng) (tš©ng)
OK åQ倧äœäžæè¿°äº?jiš£n)äžäžïŒå¯ä»¥çå°œåçäžäžªRailsåå§åå·²Ÿlç»æä»¬å±ç€ºäº?jiš£n)å ä¹å šéšrubyçéäžœä¹å€ïŒqèœè¯ŽæåQè¿äžªäº®ç¹è¯å®æ¯èŽ¯ç©¿railsçåºæ¬ïŒåšä»¥åçæ·±å ¥ç ç©¶äžæä»¬å°±èœçåîCº(jiš£n)ã?/span>