[英]After migration Rails 6.0.34 -> 6.1 I can't use model inside the config/environments/development.rb
我有 Rails 6.1.0 應用程序:
config.action_mailer.smtp_settings[:password] = AppConfig::Mailchimp.api_key
配置/環境/development.rb
module AppConfig
class Mailchimp
def self.api_key
key = ENV['MAILCHIMP_API']
# some additional processing here
# ...
key
end
end
end
應用程序/模型/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 團隊改變的具體原因,或者它不是故意的。
如何解決它,我至少有兩個選擇:
config/application.rb
或config/environments/development.rb
的某個地方require "#{Rails.root}/app/models/app/app_config/mailchimp"
,但繞過 Rails 啟動應用程序的方式看起來不太好加載環境后,使用初始化程序設置郵件程序設置:
# config/initializers/custom_smtp.rb
ActionMailer::Base.smtp_settings.merge!({ password: AppConfig::Mailchimp.api_key })
Rails 引入了新的Zeitwerk 自動加載器,並已逐漸在 Rails 6 中全面采用。如果您向下瀏覽Rails 配置指南的底部,您會看到有兩個選項可供您使用,如果您希望保留舊的工作方式:
config.load_defaults 6.0
config.autoloader = :classic
有了這些,您的原始代碼應該可以繼續工作。 但是,從您提供的示例中,我敦促您考慮使用Rails 憑據。 為此,首先運行:
bin/rails credentials:edit
為您的 Mailchimp API 密鑰添加一個條目:
mailchimp_api_key: abc1234
當您需要引用它時,您只需執行以下操作:
config.action_mailer.smtp_settings[:password] = Rails.application.credentials.mailchimp_api_key
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.