我目前正在编写一个脚本(命令行工具)来帮助我管理公开控制台。
起初我每次使用它登录控制台时都会向脚本传递三个参数,例如:
$ nexose-magic.rb -u user -p password -i 192.168.1.2 --display-scans
效率不高,所以我创建了一个config.yml文件,用于将控制台信息存储在哈希中。
$ nexpose-magic.rb -c console --display-scans
我相信该工具对管理员有用,所以我想在一个gem中分享它。我无法弄清楚如何让我的config.yml文件使用gem install ..它找不到config.yml文件!很容易将它指向我的开发目录中的相对路径,但是一旦我创建了一个gem,相对路径就不再那么相对了。如何在config.yml文件中指向nexpose-magic.rb?
有没有更好的方法来处理这样的事情?
答案 0 :(得分:0)
您可以创建包含configure
类的gem。该类有一个load
方法,它将目录作为参数。然后,您可以传递当前工作的目录。
准备gem的一个好方法是在gem中创建一个Configuration
单例类:
require 'singleton'
class Configuration
include Singleton
attr_accessor :config, :app_path
def load(app_path)
@app_path = app_path
#load the config file and store the data
@config = YAML.load_file( File.join(@app_path,'config','config.yml'))
end
end
在你的主要课程中:
module MyFancyGem
class << self
#define a class method that configure the gem
def configure(app_path)
# Call load method with given path
config.load(app_path)
end
# MyFancyGem.config will refer to the singleton Configuration class
def config
MyFancyGem::Configuration.instance
end
end
end
用法:
-Working directory
- my_new_script
- Gemfile
- config/
- config.yml
在my_new_script中:
require 'bundler'
Bundler.setup(:default)
require 'my_fancy_gem'
MyFancyGem.configure(File.join(File.dirname(__FILE__),"./")) #here, you define the path
MyFancyGem.hello_world
我希望这很清楚。我实际上是要撰写一篇博文来解释这一点(我希望在更完整的版本中)。如果你有兴趣,请告诉我!