kon*_*ung 12 ruby ruby-on-rails environment-variables
我想知道是否有关于在rails应用程序中存储全局设置的最佳实践.我的意思是:我有一些可能会改变的全局变量,但不太可能,因为它们被如此多地使用而将它们存储在DB中似乎是不合适的.例如,我有SYSTEM_EMAIL&SYSTEM_EMAIL_SIGNATURE和SYSTEM_STORAGE_ROOT.
现在我将它们保存在environment.rb中,但我不确定这是否适合存储它们.
谢谢
编辑:
接受的答案仍然适当,但我转而使用 https://github.com/markbates/configatron,还有其他选择,但我最喜欢configatron.
Sea*_*ied 15
我最喜欢的技术之一是将包含常量的文件放在目录中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
Run Code Online (Sandbox Code Playgroud)
相反,如果您希望在一个大哈希中加载所有常量,则可以将它们作为YAML文件加载.创建两个文件,一个叫,说,config/initializers/email_constants.rb和其他config/email_constants.yml.在后者中添加如下内容:
development:
:system_email: ...
:system_email_signature: ...
staging:
:system_email: ...
system_email_signature: ...
... etc ...
Run Code Online (Sandbox Code Playgroud)
然后config/initializers/email_constants.rb放入:
EMAIL_CONSTANTS = YAML.load_file("#{RAILS_ROOT}/config/email_constants.yml")[RAILS_ENV]
Run Code Online (Sandbox Code Playgroud)
这将加载整个YAML文件,并指定相应键(代表RAILS_ENV)的值EMAIL_CONSTANTS.
这两种技术的优点是地方性.您可以将所有彼此相关的常量(即本例中的电子邮件常量)放在一个文件中.此外,不是将相同的常量分布在三个不同的文件中(每个Rails环境一个),而是将它们全部放在一个文件中.
Ben*_*Ben 10
因为这些值通常会根据您运行的环境而发生变化,所以我将全局变量存储在config/environments/development.rb|production.rb|test.rb每个环境中,并使用适当的值.
| 归档时间: |
|
| 查看次数: |
4704 次 |
| 最近记录: |