我想知道在rails应用程序中存储全局设置的最佳做法.我的意思是,我有一些全局变量定义可能改变,但不太可能,它们似乎不适合将它们存储在数据库中,因为它们被使用了很多.例如我有SYSTEM_EMAIL& SYSTEM_EMAIL_SIGNATURE& SYSTEM_STORAGE_ROOT.
现在我把它们保存在environment.rb中,但我不知道这是否存储它们是正确的.
谢谢
编辑:
接受的答案仍然是适当的,但是我从转到使用https://github.com/markbates/configatron,还有其他选择,但我最喜欢configatron.
解决方法
我最喜欢的技术之一是将包含常量的文件放在目录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环境一个),您可以将它们全部放在一个文件中.