ruby-on-rails - 如果 YAML 文件不存在或无法在 Rails 中加载,请进行救援

标签 ruby-on-rails ruby yaml config

我正在使用 YAML 文件来存储一些 secret 配置数据。我只是在开发环境中使用该文件。在生产中,我使用 ENV 变量。

这是我现在正在做的事情:

我有一个 config/confidental.yml 文件,看起来像这样:

email:
  user_name: 'my_user'
  password: 'my_passw'

我有一个 config/environments/development.rb 文件(除其他外)有这些行:

 # Mailer config
  email_confidential = YAML.load_file("#{Rails.root}/config/confidential.yml")['email']
  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    :address              => "smtp.gmail.com",
    :port                 => 587,
    :domain               => 'baci.lindsaar.net',
    :user_name            => email_confidential['user_name'],
    :password             => email_confidential['password'],
    :authentication       => 'plain',
    :enable_starttls_auto => true  }

我的问题是:如何确保 YAML 文件存在并且可以加载,如果不存在则抛出一些异常?应该放在哪里?

最佳答案

为什么不

unless File.exists? ("#{Rails.root}/config/confidential.yml")
  # do what you want (throw exception or something) 
end

顺便说一句,我认为将带有配置的加载 yaml 放入初始化程序是个好主意。例如

# config/initializers/load_project_config_file.rb

if File.exists? ("#{Rails.root}/config/project.yml")
  PROJECT = YAML.load_file("#{Rails.root}/config/project.yml")
else
  PROJECT = {}
end

关于ruby-on-rails - 如果 YAML 文件不存在或无法在 Rails 中加载,请进行救援,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16276232/

相关文章:

ruby - ruby安装错了吗?

ruby-on-rails - 如何使用Rails使用两个关系i18n yaml文件以一种形式很好地显示?

ruby - Delayed_job 导致 Heroku 工作线程崩溃(YAML 问题?)

Azure Pipeline 拒绝从 zip 部署,而是从不存在的 blob 调用

ruby - 反转数组的最有效方法?

ruby - ||= 在 Ruby 中做什么

ruby-on-rails - Rails - 本地机器上现有的开发 Postgres 数据库到 Heroku

ruby-on-rails - Rails 应用程序中的非持久数据

ruby-on-rails - Ruby on Rails AASM 更改按钮单击时的转换

ruby-on-rails - Rails 的 cron 作业 : best practices?