class Dotenv::Rails

Rails integration for using Dotenv to load ENV variables from a file

Constants

TEST_RAKE_TASKS

Public Class Methods

load() click to toggle source

Rails uses ‘#method_missing` to delegate all class methods to the instance, which means `Kernel#load` gets called here. We don’t want that.

# File lib/dotenv/rails.rb, line 89
def self.load
  instance.load
end
new() click to toggle source
Calls superclass method
# File lib/dotenv/rails.rb, line 25
def initialize
  super
  config.dotenv = ActiveSupport::OrderedOptions.new.update(
    # Rails.logger is not available yet, so we'll save log messages and replay them when it is
    logger: Dotenv::ReplayLogger.new,
    overwrite: false,
    files: [
      ".env.#{env}.local",
      (".env.local" unless env.test?),
      ".env.#{env}",
      ".env"
    ].compact,
    autorestore: env.test? && !defined?(ClimateControl) && !defined?(IceAge)
  )
end

Public Instance Methods

env() click to toggle source

The current environment that the app is running in.

When running ‘rake`, the Rails application is initialized in development, so we have to check which rake tasks are being run to determine the environment.

See github.com/bkeepers/dotenv/issues/219

# File lib/dotenv/rails.rb, line 73
def env
  @env ||= if defined?(Rake.application) && Rake.application.top_level_tasks.grep(TEST_RAKE_TASKS).any?
    env = Rake.application.options.show_tasks ? "development" : "test"
    ActiveSupport::EnvironmentInquirer.new(env)
  else
    ::Rails.env
  end
end
load() click to toggle source

Public: Load dotenv

This will get called during the ‘before_configuration` callback, but you can manually call `Dotenv::Rails.load` if you needed it sooner.

# File lib/dotenv/rails.rb, line 45
def load
  Dotenv.load(*files.map { |file| root.join(file).to_s }, overwrite: overwrite)
end
logger=(new_logger) click to toggle source

Set a new logger and replay logs

# File lib/dotenv/rails.rb, line 62
def logger=(new_logger)
  logger.replay new_logger if logger.is_a?(ReplayLogger)
  config.dotenv.logger = new_logger
end
overload() click to toggle source
# File lib/dotenv/rails.rb, line 49
def overload
  deprecator.warn("Dotenv::Rails.overload is deprecated. Set `Dotenv::Rails.overwrite = true` and call Dotenv::Rails.load instead.")
  Dotenv.load(*files.map { |file| root.join(file).to_s }, overwrite: true)
end
root() click to toggle source

Internal: ‘Rails.root` is nil in Rails 4.1 before the application is initialized, so this falls back to the `RAILS_ROOT` environment variable, or the current working directory.

# File lib/dotenv/rails.rb, line 57
def root
  ::Rails.root || Pathname.new(ENV["RAILS_ROOT"] || Dir.pwd)
end