我最喜歡的技巧之一是將一個包含常量的文件放在目錄config/initializers/
(該目錄中的所有文件都會自動加載),但每個不同的Rails環境都有一個部分。例如
case ENV['RAILS_ENV']
when "development"
SYSTEM_EMAIL = ...
SYSTEM_EMAIL_SIGNATURE = ...
when "staging"
SYSTEM_EMAIL = ...
SYSTEM_EMAIL_SIGNATURE = ...
when "production"
SYSTEM_EMAIL = ...
SYSTEM_EMAIL_SIGNATURE = ...
end
如果你想,而不是加載所有的常量在一個大的散列,那麼你可以加載它們作爲一個YAML文件。創建兩個文件,一個叫做config/initializers/email_constants.rb
,另一個config/email_constants.yml
。在後者的放像:
development:
:system_email: ...
:system_email_signature: ...
staging:
:system_email: ...
system_email_signature: ...
... etc ...
然後在config/initializers/email_constants.rb
地說:
EMAIL_CONSTANTS = YAML.load_file("#{RAILS_ROOT}/config/email_constants.yml")[RAILS_ENV]
這會將整個YAML文件和受讓人相應的鍵的值(代表RAILS_ENV
),以EMAIL_CONSTANTS
。
這兩種技術的優點是地方性。您可以將所有與彼此相關的常量(即本例中的電子郵件常量)放在一個文件中。而且,不是將三個不同的文件(每個Rails環境一個文件)分散在同一個常量中,而是將它們全部放在一個文件中。
謝謝肖恩。 我喜歡你最接近 - 除了我不認爲我需要分離到email_constants.yml - 我會保持在contacnts.yml中的一切 – konung 2010-04-20 20:24:29