Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在启动文件中加载环境变量_Ruby On Rails_Ruby_Ruby On Rails 5.2 - Fatal编程技术网

Ruby on rails 在启动文件中加载环境变量

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

在boot.rb中加载environment变量时遇到问题。我尝试了两个gems-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

在测试环境变量之前,您可以根据需要使用
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文件与实际的机器特定工具混淆。