我正在尝试创建一个gem,它封装了一些外部的API调用,我想使用一个名为“api蓝图”的gem。
我已经添加了我的gemspec文件spec.add_runtime_dependency 'api-blueprint'的依赖项。
现在我想让我的一些类继承它
module MyGem
class Request < ApiBlueprint::Model
... code ...
end
end我得到了一个错误
NameError:
uninitialized constant MyGem::ApiBlueprint我也不确定如何继承依赖项,而不将我的gem名称附加到命名空间中。我也尝试过不将它封装在模块中,但是我得到了相同的问题,尽管没有MyGem命名空间。
我在rails应用程序中使用了这个gem,同样的用法也没有问题,但现在我需要将rails应用程序中的逻辑重构为gem。
我还试图同时要求api_blueprint和api-blueprint,后者返回此错误
Failure/Error: require "api-blueprint"
ArgumentError:
wrong number of arguments (given 2, expected 0)而前者只是返回一个LoadError。我不确定这里的问题似乎是什么,我是否需要包括在其他地方,除了宝石规范文件?注意,我也使用spec.add_dependency,但是我也遇到了同样的问题。我有点迷路了,这是我第一次去红宝石
(谢谢你的关注:)
发布于 2021-04-07 10:32:46
和我不确定如何从依赖项继承,而不将我的gem名称附加到命名空间中。
你不需要那样做。你只是被一条误导的错误信息弄糊涂了。
在ruby中,常量查找首先在模块内进行,然后在全局命名空间中进行。
换句话说,这个代码:
module MyGem
class Request < ApiBlueprint::Model首先尝试查找常量:MyGem::ApiBlueprint::Model,然后尝试查找常量:ApiBlueprint::Model (如果失败)。如果这也失败了,它将使用第一个错误消息,这就是您所看到的。
为了防止令人困惑的错误消息(尽管这本身并不能解决实际的问题!!),您可以显式地告诉解释器只查找全局命名空间中的常量:
module MyGem
class Request < ::ApiBlueprint::Model失败/错误:需要“api-蓝图”ArgumentError:参数数错误(给定2,预期为0)
您需要为我们提供更多关于该错误的上下文。堆栈跟踪是什么?用2个参数而不是0调用什么方法?
据我所知,添加这个require语句应该是您需要做的全部工作。
https://stackoverflow.com/questions/66983664
复制相似问题