对于从devise.rb中的环境变量读取的所有配置,Settings返回nil

时间:2016-02-29 11:13:59

标签: ruby-on-rails ruby-on-rails-4 devise passenger

我在Rails 4.2.5应用程序中使用config gem进行配置管理。我面临一个奇怪的问题,它看起来像devise.rb之后的配置加载,因此无法在生产中找到来自settings.yml的任何配置读取一些环境变量。

这是application.rb config

require File.expand_path('../boot', __FILE__)
require 'rails/all'
Bundler.require(*Rails.groups)

module Magnificent
  class Application < Rails::Application
    Config::Integration::Rails::Railtie.preload
  end
end

devise.rb

Devise.setup do |config|
  config.omniauth :twitter, Settings.twitter.consumer_key, Settings.twitter.consumer_secret, strategy_class: OmniAuth::Strategies::Twitter
  config.omniauth :facebook, Settings.facebook.app_id, Settings.facebook.app_secret , { info_fields: 'email,first_name,last_name' , scope: 'email,public_profile' }
end

settings.yml中

twitter:
  consumer_key: <%= ENV['TWITTER_CONSUMER_KEY'] %>
  consumer_secret: <%= ENV['TWITTER_CONSUMER_SECRET'] %>
facebook:
  app_id: <%= ENV['FACEBOOK_APP_ID'] %>
  app_secret: <%= ENV['FACEBOOK_APP_SECRET'] %>

P.S。这在开发环境中完美运行。此外,当我从生产中的控制台访问Settings.twitter.consumer_key时,它会显示值。

该应用程序在Passenger 5.0.25上运行。

修改 很少有模型也使用配置中的设置来读取环境变量中的值。此类设置也具有零值。令人惊讶的是,当我从控制台(RAILS_ENV=production rails c

检查时,从环境读取值的所有设置都具有正确的值集

1 个答案:

答案 0 :(得分:0)

使用key作为环境变量名创建了一个yml文件。然后在application.rb

中的模块声明之前添加环境变量
require 'rails/all'

# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(*Rails.groups)

if Rails.env.production?
  config_file = '/srv/shared_filesystem/pdf-config.yml'
  if File.exists?(config_file)
    config = YAML.load(File.read(config_file))
    config.each do |key, value|
      ENV[key] ||= value.to_s unless value.kind_of? Hash
    end
  else
    raise 'Missing required configuration file /srv/shared_filesystem_ro/pdf-config.yml'
  end
end

module MyApp
  class Application < Rails::Application
  .. ..
  .. ..
  end
end