我正在尝试创建一个与罗盘一起使用的本地配置文件,以便我们可以在开发人员的机器上处理不同的导入路径.到目前为止,我已经尝试在异常块中导入文件,如果它不存在,那么进一步使用该变量:
local_config.rb
VENV_FOLDER = 'venv'
Run Code Online (Sandbox Code Playgroud)
config.rb
VENV_FOLDER = '.'
begin
require 'local_config.rb'
rescue LoadError
end
puts VENV_FOLDER
Run Code Online (Sandbox Code Playgroud)
一般情况下我是一个Python开发人员,所以我预计进口到改变的值VENV_FOLDER来venv,但它仍然是.事后.
有没有办法以local_config.rb这样的方式导入它覆盖的值VENV_FOLDER?
Car*_*ter 12
其他替代品:
local_config.yml
venv_folder: 'venv'
Run Code Online (Sandbox Code Playgroud)
config.rb
require 'yaml'
VENV_FOLDER = begin
YAML.load_file('local_config.yml').fetch('venv_folder')
rescue Errno::ENOENT, KeyError
'.'
end
puts VENV_FOLDER
Run Code Online (Sandbox Code Playgroud)
您可以将值放在类实例变量中:
local_config.rb
Config.venv = 'venv'
Run Code Online (Sandbox Code Playgroud)
config.rb
class Config
class << self ; attr_accessor :venv ; end
self.venv = '.'
end
begin
require './local_config.rb'
rescue LoadError
end
puts Config.venv
Run Code Online (Sandbox Code Playgroud)
此外,坚持使用常量的ruby文件,以下可能在其意图中略微清楚,并避免必须捕获异常.
local_config.rb
VENV_FOLDER = 'venv'
Run Code Online (Sandbox Code Playgroud)
config.rb
config_file = './local_config.rb'
require config_file if File.file? config_file
VENV_FOLDER ||= '.'
puts VENV_FOLDER
Run Code Online (Sandbox Code Playgroud)
所有三种解决方案都有不同的机制来确保即使文件丢失或未按预期设置值也将设置该值.希望它有用