4

我创建了一个名为的 gem kmdata,它有一个可执行文件。bundle exec kmdata decot.7从我的 gem 文件夹中运行时,一切正常。将 gem 释放到 ruby​​gems 后,我跑了gem install kmdata(在新窗口中)。然后我尝试运行kmdata decot.7并得到以下信息

/Users/kyledecot/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http.rb:891:in `connect': undefined method `set_params' for #<OpenSSL::SSL::SSLContext:0x007fff31d59d18> (NoMethodError)
    from /Users/kyledecot/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http.rb:862:in `do_start'
    from /Users/kyledecot/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http.rb:851:in `start'
    from /Users/kyledecot/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http.rb:1367:in `request'
    from /Users/kyledecot/.rvm/gems/ruby-2.0.0-p247/gems/kmdata-0.0.3/lib/kmdata.rb:24:in `get'
    from /Users/kyledecot/.rvm/gems/ruby-2.0.0-p247/gems/kmdata-0.0.3/bin/kmdata:5:in `<top (required)>'
    from /Users/kyledecot/.rvm/gems/ruby-2.0.0-p247/bin/kmdata:23:in `load'
    from /Users/kyledecot/.rvm/gems/ruby-2.0.0-p247/bin/kmdata:23:in `<main>'

lib/kmdata.rb 中的行是

response = http.request(Net::HTTP::Get.new(path))

更新#1

仅在使用2.0. 如果我在其中运行相同的命令,1.9.3那么一切都会按预期工作。

4

3 回答 3

3

您可能需要包含这一行(例如,在文件的开头):

require 'openssl'

我在 2.0 上遇到了这个错误,添加这一行修复了它。也许您的 1.9.3 有一些隐式需要的配置/宝石?

于 2013-12-21T23:46:34.120 回答
0

出乎意料,但是您是否已将 Net::HTTP 配置为使用 SSL 连接? 使用 Net::HTTP.get 获取 https url

这是另一个有同样问题的人......没有提到这是一个解决方案,但试试看:https ://www.ruby-forum.com/topic/4417738

这看起来像 Net::HTTP 中的错误...您使用的是最新版本的 gem 吗?

于 2013-10-24T18:54:06.663 回答
0

如果我是你,我会专注于:

undefined method `set_params' for #<OpenSSL::SSL::SSLContext:0x007fff31d59d18> (NoMethodError)

我认为您可以将您的 gem 组织成这样一种方式,即要么不包含某些东西,要么您有两个具有相同名称的类或方法,而现在选择了错误的类或方法。我曾经发生过几次类似的事情。

简单地说,它可能最终会成为一个范围的东西——一个要求/包含,或一个重复的方法。

如果我是对的,我们无能为力 - 无法访问您的计算机。

我希望你找到它。如果您还没有,我建议您对文件进行一些 grepping/搜索以获取方法名称、类名称等。

编辑:回头看,您似乎只是在处理股票代码。如果是这种情况,请尝试卸载所有版本的 ruby​​,然后重新安装 2.0.0。你会感到惊讶 - 我已经让 1.9.3 在安装它们时做了类似的事情。

于 2013-10-29T16:39:04.150 回答