Ruby on rails 在启动文件中加载环境变量
在boot.rb中加载environment变量时遇到问题。我尝试了两个gems-dotenv和dotenv-rails,但都不适合我。在其他地方,我可以使用环境变量,但不能在boot.rb中使用。有人知道这件事吗Ruby on rails 在启动文件中加载环境变量,ruby-on-rails,ruby,ruby-on-rails-5.2,Ruby On Rails,Ruby,Ruby On Rails 5.2,在boot.rb中加载environment变量时遇到问题。我尝试了两个gems-dotenv和dotenv-rails,但都不适合我。在其他地方,我可以使用环境变量,但不能在boot.rb中使用。有人知道这件事吗 if ["development"].include?(ENV['RAILS_ENV']) require 'bootsnap/setup' Bootsnap.setup( cache_dir: 'tmp/cach
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
在测试环境变量之前,您可以根据需要使用
load
或require
来显式处理.env
文件。DotEnv仅在加载Gem后将.env
文件加载到env中
在Rails中,这是由config/application.rb
中的行Bundler.require(*Rails.groups)
完成的。如果在此之前需要访问环境变量,则需要手动调用Dotenv::Railtie.load
:
Bundler.require(*Rails.groups)
Dotenv::Railtie.load
至少是这样。我想您可以使用纯ruby方法代替Railtie:
require 'dotenv'
Dotenv.load
但是有很多选项可以从一个文件中设置ENV变量,比如一个不是Ruby gem的文件,并将其挂接到shell本身。您没有说
RAILS\u ENV
的内容是什么,但是由于您的数组只有一个元素(“development”
),如果ENV['RAILS\u ENV']=“development”,您可以将条件重写为。它与您当前的代码相同,但更容易理解。RAILS\u ENV=development在.ENV文件中设置,但设置为哪个值?此外,执行此代码时,是否确定已处理.env
文件?我建议打印这个值以进行调试。我尝试调试ENV['RAILS\u ENV']的值,它给出的值为零。但是,当我在rails控制台或应用程序中的任何地方签入时,它给了我正确的值。我怀疑的是在boot.env文件未加载的时候,我已经投票结束了这个问题。谢谢,它不是那样工作的,但它给了我提示。当我在application.rb中添加Dotenv::Railtie.load时,它是为Dotenv::Railtie:Class调用的私有方法'load'。然后我再次尝试boot.rb中的同一行,但仍然没有成功。后来,我在boot.rb中尝试了这两行代码,但它成功了。我想,需要'dotenv'dotenv.loads时,这两行代码就失效了。我已经好几年没用dotenv了direnv
执行此任务,并避免将GEM文件与实际的机器特定工具混淆。