簡體   English   中英

遷移 Rails 6.0.34 -> 6.1 后,我無法在 config/environments/development.rb 中使用 model

[英]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。 顯然他們已經改變了在新版本中加載東西的方式,但我想知道:

  1. 有誰知道這種改變的基本原理,任何導致 Rails 團隊改變的具體原因,或者它不是故意的。

  2. 如何解決它,我至少有兩個選擇:

加載環境后,使用初始化程序設置郵件程序設置:

# 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM