【发布时间】:2020-12-31 21:08:10
【问题描述】:
我有 Rails 6.1.0 应用程序:
config.action_mailer.smtp_settings[:password] = AppConfig::Mailchimp.api_key
config/environments/development.rb
module AppConfig
class Mailchimp
def self.api_key
key = ENV['MAILCHIMP_API']
# some additional processing here
# ...
key
end
end
end
app/models/app_config/mailchimp.rb
当尝试运行开发控制台时:
/config/environments/development.rb:59:in `block in <top (required)>': uninitialized constant AppConfig (NameError)
我在迁移 6.0.3.4 -> 6.1 之后,它在旧版 Rails 中运行良好。 显然他们已经改变了在新版本中加载内容的方式,但我想知道:
-
是否有人知道该更改的基本原理,导致 Rails 团队更改的任何具体原因,或者不是故意的。
-
如何解决,我至少有两种选择:
-
require "#{Rails.root}/app/models/app/app_config/mailchimp"在config/application.rb或config/environments/development.rb中的某处,但它看起来不太好,因为它绕过了 Rails 启动应用程序的方式 - 使用https://www.rubydoc.org/github/rails/rails/master/ActiveSupport/ConfigurationFile的一些内置方式加载配置
-
【问题讨论】:
-
首先,为什么models文件夹中有一个配置文件,为什么不将值作为ENV变量传递?你不应该对敏感数据进行硬编码。
-
完全同意@cesartalves,更新了问题-它从 env 中获取值并使用该值进行一些处理。为了方便起见,我使用了硬编码值,但它确实是环境。关于保留它的模型,我对此没有影响。
标签: ruby-on-rails ruby