gpt4 book ai didi

ruby-on-rails - MyGem :Module 的未定义方法 `configure'

转载 作者:数据小太阳 更新时间:2023-10-29 08:58:31 26 4
gpt4 key购买 nike

问题的背景

  • gem 'leanpirates-aarrr', '~> 0.1.1', :path => "/src/gem-aarrr"运行正常
  • rails g显示发电机 lean_pirates:aarrr:install
  • config/initializers/leanpirates_aarrr.rb 下成功创建了初始化程序
  • 但是初始化程序在尝试配置 gem 时失败

初始化程序:leanpirates_aarrr.rb

LeanPirates::Aarrr.configure do |config|
config.api_server = "http://localhost:3000"
config.startup_key = Rails.configuration.leanpirates_aarrr.startup_key
config.startup_secret = Rails.application.secrets.leanpirates_startup_secret
end

gem 定义文件:aarrr.rb

# (...)
module LeanPirates
module Aarrr
class << self
attr_writer :configuration
end

def self.configuration
@configuration ||= LeanPirates::Aarrr::Domain::Configuration.new
end

def self.reset
@configuration = LeanPirates::Aarrr::Domain::Configuration.new
end

def self.configure
yield(configuration)
end
end
end

错误

/src/app-ebusiness-v3/config/initializers/leanpirates_aarrr.rb:1:in <top (required)>: undefined method 'configure' for LeanPirates::Aarrr:Module (NoMethodError)

/src/app-ebusiness-v3/config/initializers/leanpirates_aarrr.rb:1:in `<top (required)>': undefined method `configure' for LeanPirates::Aarrr:Module (NoMethodError)
from /home/ubuntu/.rvm/gems/ruby-2.4.0/gems/activesupport-5.0.2/lib/active_support/dependencies.rb:287:in `load'
from /home/ubuntu/.rvm/gems/ruby-2.4.0/gems/activesupport-5.0.2/lib/active_support/dependencies.rb:287:in `block in load'
from /home/ubuntu/.rvm/gems/ruby-2.4.0/gems/activesupport-5.0.2/lib/active_support/dependencies.rb:259:in `load_dependency'
from /home/ubuntu/.rvm/gems/ruby-2.4.0/gems/activesupport-5.0.2/lib/active_support/dependencies.rb:287:in `load'
(...)

这是来自 https://github.com/lean-pirates/gem-aarrr/tree/simplification 的开源 LeanPirates AARRR (分支simplification)

最佳答案

Rails 中的自动加载器功能非常方便,它可以自动处理大量事情,但也不是很智能。如果已定义 namespace ,它将不会加载其他文件。

作为 gem,您有义务要求您的库正常工作所需的任何和所有支持模块或类。

这是 lib/gem/aarrr/version.rb 中的问题:

module LeanPirates
module Aarrr
VERSION = '0.1.1'
end
end

现在 LeanPirates::Aarrr 已经被定义,所以自动加载器不需要额外的工作。因此,您的 lib/gem/aarrr.rb 永远不会加载。

要解决此问题,您需要避免创建该命名空间路径。您还应确保在 .gemspec 文件中正确设置了 require_paths,以便正确引用 lib/gem。现在你必须 require 'gem/aarrr' 这真的很困惑和笨拙。

我通常在主 gem 目录中设置一个普通的 VERSION 文件,其中只有版本字符串。如果需要,gemspec 可以通过 File.read 按需读取它,或者您可以使用 rake 任务将其烘焙到 .gemspec 中.我更喜欢后一种方法,因为制作一个包含大量任意代码的 .gemspec 总是过于复杂。

关于ruby-on-rails - MyGem :Module 的未定义方法 `configure',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42613766/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com