问题描述
在boot.rb中加载环境变量时遇到问题。我尝试了2个dotenv和dotenv-rails宝石,但是它们都不适合我。我可以在其他地方使用环境变量,但不能在boot.rb中使用。任何人对此都有任何线索
if ["development"].include?(ENV['RAILS_ENV'])
require 'bootsnap/setup'
Bootsnap.setup(
cache_dir: 'tmp/cache',# Path to your cache
development_mode: 'development',# Current working environment,e.g. RACK_ENV,RAILS_ENV,etc
load_path_cache: true,# Optimize the LOAD_PATH with a cache
autoload_paths_cache: true,# Optimize ActiveSupport autoloads with cache
compile_cache_iseq: true,# Compile Ruby code into ISeq cache,breaks coverage reporting.
compile_cache_yaml: true # Compile YAML into a cache
)
end
解决方法
DotEnv仅在加载了Gem后将您的.env
文件加载到env。
在Rails中,这是通过Bundler.require(*Rails.groups)
中的行config/application.rb
完成的。如果您需要在此之前访问环境变量,则需要手动调用Dotenv::Railtie.load
:
Bundler.require(*Rails.groups)
Dotenv::Railtie.load
或者至少是what the readme would lead you to belive。我猜您可以使用普通的红宝石方法来代替Railtie:
require 'dotenv'
Dotenv.load
但是有很多选项可以从direnv之类的文件中设置ENV var,该文件不是Ruby宝石,并且可以直接插入您的shell。
,在测试环境变量之前,可以根据需要使用load
或require
显式处理.env
文件。