“香草” Ruby dotenv是否会拾取.env以外的任何文件?

时间:2019-05-20 03:23:29

标签: ruby rspec rake dotenv

我想在非Rails Ruby应用程序中使用特定于环境的变量。

我尝试了不同的文件名,例如.env.test.local.env.local.env.test

我尝试使用Dotenv.loadrequire 'dotenv/load'方法

这就是我包裹任务的方式

require 'rspec'
require 'rack/test'
require 'rspec/core/rake_task'
require 'dotenv/tasks'

task test: :dotenv do
  RSpec::Core::RakeTask.new(:spec).run_task(verbose: true)
end

这是我的服务器

require 'dotenv/load'
require 'sinatra'
require 'sinatra/reloader' if development?

set :bind, '0.0.0.0'

get ENV['API_URL'] do
  'Hello World!'
end

我的.env.test文件

API_URL=/api/v1

预期行为

{_ 1}}任务(使用:test)运行的代码应该可以使用API​​_URL变量。

观察到的行为

由于bundle exec rake test为空而导致的错误。

ENV['API_URL']

See the repo

1 个答案:

答案 0 :(得分:0)

我想出了解决方法

require 'dotenv'
require 'sinatra'
require 'sinatra/reloader' if development?
Dotenv.load(".env.#{ENV['APP_ENV']}") # Remember to set your app environment

set :bind, '0.0.0.0'

get ENV['API_URL'] do
  'Hello World!'
end

它仅适用于.env.<ENVIROMENT>个文件。也许可以将其包装在一个函数中,但是我绝对希望像在Rails应用程序中那样由gem处理它,对我来说更有意义。