我正在制作一个红宝石宝石,我们称之为 Radin 。它用在Rails项目中。有一个安装过程通过运行config/initializers/radin.rb
来创建rails generate radin:install
。
config / initializers / radin.rb (Rails项目)
Radin.configure do |config|
# Set this options to what makes sense for you
config.option = 'test'
end
发电机按预期工作(如上所示)。在我的宝石中,我关注了两个链接MyGem.configure Block和Config and Generators in Gems。
我有一个可执行文件来检查配置是否已设置。
/ EXE /雷丁
#!/usr/bin/env ruby
require 'radin'
output = {}
output["option"] = Radin::Documentor.test_configuration
puts "Output: #{output}"
我的Documentor类只输出我的一个配置选项
/lib/radin/documentor.rb
module Radin
class Documentor
def self.test_configuration
Radin.configuration.option
end
end
end
最后我有Radin
模块和Configuration
类
/lib/radin.rb
require "radin/version"
require 'json'
module Radin
autoload :Documentor, 'radin/documentor'
class << self
attr_accessor :configuration
end
def self.configure
self.configuration ||= Configuration.new
yield(configuration)
end
class Configuration
attr_accessor :option
def initialize
@option = 'default_option'
end
end
end
当我在test rails应用程序目录中运行$ radin
时,尽管在config/initializers/radin.rb
中设置了配置选项,但仍会出现错误。
... / radin / lib / radin / documentor.rb:8:在
test_configuration': undefined method
选项'中为nil:NilClass(NoMethodError)
尝试过&amp;失败 我试图将模块更改为始终具有默认设置,但是尽管更改了初始化程序中的配置,但选项永远不会从'default_option'更改。
module Radin
class << self
attr_accessor :configuration
end
def self.configuration
@configuration ||= Configuration.new
end
def self.configure
yield(configuration)
end
...
答案 0 :(得分:1)
在我的可执行文件radin
中,我添加了:
begin
load File.join(Dir.pwd, 'config', 'initializers', 'radin.rb')
rescue LoadError
puts "Please run `rails generate radin:install` before continuing "
end
现在一切似乎都正常了。