- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我正在使用 bundler
来处理 ruby gems 依赖项。我需要以编程方式使用 bundler
的 gem。
当我尝试以编程方式调用 knife
时,它的依赖项是在 Gemfile
中指定的,我遇到了错误。我执行 knife
如下:
Chef::Knife.run ["-v"] #invoking knife
并返回以下错误:
/var/lib/gems/2.0.0/gems/chef-11.6.2/lib/chef/knife/edit.rb:5:in `<class:Knife>': superclass mismatch for class Edit (TypeError)
我熟悉Ruby on Rails 3 : "superclass mismatch for class ..."以及发生这种情况的原因。但是我没有做任何与上述 stackoverflow 帖子中的解释一致的事情。
有人可以阐明这个问题并解决它吗?
最佳答案
你是对的,这是相关的错误。
class Edit
已在其他地方定义,其父类(super class)与现在尝试使用的父类(super class)不同。
在irb/pry上简单测试
[56] pry(main)> class Comida; end
[57] pry(main)> class Comida < Integer; end
TypeError: superclass mismatch for class Comida
from (pry):53:in `__pry__'
因此,您应该以编程方式发布/检查您对 bundler 的确切需求以及方式。为什么不使用 Gemfile
然后使用 bundle exec
来运行您的脚本?让 bundler 为您处理依赖关系,如果您以编程方式执行此操作,因为您担心需要 gem 的方式和时间,您可以添加 required: false
以避免自动行为并在需要时自行执行 require,即
更改此 Gemfile
gem 'chef-solo'
gem 'knife-solo'
对此:
gem 'chef-solo', require: false
gem 'knife-solo', require: false
然后在您的代码中手动执行需要时的要求,并收回您需要的控制权:
# ... code ....
require 'chef-solo'
# ... more code ...
require 'knife-solo'
收件人debug您可以在该违规行设置断点:
$ ruby -r debug your_program.rb
# Set a breakpoint where problem arises
break /var/lib/gems/2.0.0/gems/chef-11.6.2/lib/chef/knife/edit.rb:5
# Set a poor-man debug `puts` to find out where is a class defined
class Object
def self.inherited(klass)
targets = %w(Edit Chef::Knife::Edit)
puts "#{klass.name} defined at #{__FILE__}:#{__LINE__}" if targets.include?(klass.name)
end
end
# Now run until program ends or hits that breakpoint
cont
# Once it hits the breakpoing program will pause there and you can play around but the previus `puts` should already have showed where the `Edit` class is first defined.
#=> Chef::Knife::Edit defined at /some/pissing/file:432
您也可以使用 pry.binding
在该行停止程序并通过临时编辑 edit.rb
环顾四周看看发生了什么
$ vim /var/lib/gems/2.0.0/gems/chef-11.6.2/lib/chef/knife/edit.rb + 5
# Add this code before the offending line:
require 'pry'
binding.pry
还需要在您的 Gemfile
中包含 gem "pry"
才能正常工作并使用 bundle exec
运行程序忘记了。
程序将在继续之前停止(在 binding.pry
行),然后您可以使用 pry goodness 来找出已经定义该类的位置
[1] pry(main)> ? Bundler
#=> From: .../gems/bundler-1.3.5/lib/bundler.rb @ line 9
[2] pry(main)> ? Chef::Knife::Edit
#=> From: xxxxxxx.rb @ line xx
还有pry-rescue gem 将“在出现问题时启动一个窥探 session ”
$ gem install pry-rescue pry-stack_explorer
$ rescue your_program.rb
或者,如果通过 bundle exec
运行您的程序,请将其添加到您的 Gemfile
group :development do
gem 'pry-rescue'
gem 'pry-stack_explorer'
end
每当出现异常时,程序都会进入一个 pry session!
很抱歉给了这么多选项,希望对您有所帮助!
关于ruby - Chef/Knife ( ruby )错误 : superclass mismatch for class Edit (TypeError),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20468110/
我有 Site {{$url}} 和 $(function(){ $('#pencil').click
我在每一行都有一个编辑按钮,我已经设置了 defaultColDef: { editable: false, } 在网格选项中 当我点击编辑按钮时,我希望该行处于编辑模式。如果我设置
我在每一行都有一个编辑按钮,我已经设置了 defaultColDef: { editable: false, } 在网格选项中 当我点击编辑按钮时,我希望该行处于编辑模式。如果我设置
我有一个 html 文件,我想编辑其中的字段。以下是我的 html 代码: ID GROUP NAME GROUP DESCRIPTION IS A
我希望管理员能够编辑普通用户无法编辑的字段。例如作者或订阅者等。 我试过这个:Django admin: How to display a field that is marked as editab
如何将PS文件中间的数据移动到Mainframe的左侧?有什么快捷命令吗? 我有一个数据集,第 13 列有数据,必须将其移动到第 11 列,任何短键都可以移动它。 想要将 DS 中的其余行作为第一行对
我在 div 中有一个可编辑元素,它本身是可点击的。每当我单击 x-editable anchor 元素时,单击会在 DOM 中冒泡并触发对父 div 的单击。我怎样才能防止这种情况发生?我知道可以使
我有一个类似这样的模型: class Product(models.Model): third_party_id = models.CharField(max_length=64, blank
我有一个包含 2 个可编辑文本字段的页面 {{creator.name}} Tell us about yourself in less than 100 words
这是我的架构: id: 'EntryCode', fields: { EntryCode: {editable: true, validation: {required: true}, nul
有人可以帮助确定这个问题 - http://jsfiddle.net/xBB5x/8823/ 我正在尝试实现 x-editable (bootstrap 2) typeahead 功能。 上面的 js
如果我使用例如 g_object_set (renderer, "background", "red", "background-set", FALSE, NULL); 对于文本渲染器, TreeVi
我在创建和编辑页面上都使用了 Angular 文件,但我想知道是否有办法阻止用户在/edit 页面上编辑 Geo Segment 的名称。 geo-region-detail.html: G
我正在尝试向 QListWidget 添加一个项目,选择该项目,然后开始编辑新项目。 该项目被添加,它被选中,但该行没有被引入 QLineEdit,或者它试图使用的任何东西。 这是我的小部件的代码,相
我有一个表格,其中的单元格和列中有多个值。当用户单击 TD 单元格上的任意位置时,我希望它: 成为文本区域 将当前文本粘贴到文本区域 在其下方放置一个取消按钮 一旦按下取消按钮,我希望一切都变回以前的
在我的程序中,会有一个机会编辑框,它可以更改“掉率”或“获胜率” 但我想将其更改为如果用户输入大于 100 的数字并点击编辑框,编辑框文本将变回 100。 我不知道如何实现这个。 最佳答案 看看下面的
我想创建我的编辑表单,以便它将当前用户信息简单地显示为文本,而不是在文本字段中,当用户单击文本时,它将变成文本字段,用户可以编辑他的信息。仅当用户单击提交按钮时,更改才会反射(reflect)在数据库
我有一个 QTreeWidgetItem 添加到 QTreeWidget: QTreeWidgetItem* item = new QTreeWidgetItem(ui->trwPairs); ite
我检查了最新的 Dropbox 和 Excel for iOS。在 Dropbox 中,我们有一个编辑按钮。单击它会打开 Excel 的扩展程序,您可以在其中编辑文件。 保存后,更改也会反射(refl
我目前正在使用pycord创建一个Python语言的不和谐机器人。我有一个发送消息的命令,其中嵌入了两个字段。一个名为Yes,值为0;另一个名为No,值也为0。在选择菜单中,我创建了两个选项。选项是和
我是一名优秀的程序员,十分优秀!