2

我正在尝试制作一个 Ruby 控制台脚本来进行 namecheap API 调用。我找到了namecheap gem 并使用sudo gem install namecheap.

我编写了我的测试脚本,隐藏了密钥、用户名和 clientip:

#!/usr/bin/env ruby

require 'namecheap'

Namecheap.configure do |config|
  config.key = 'mykey'
  config.username = 'myusername'
  config.client_ip = 'myip'
end
Namecheap.domains.get_list

我的红宝石版本:

ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux]

运行脚本时出现此错误:

/var/lib/gems/1.9.1/gems/namecheap-0.1.2/lib/monkey_patch.rb:14:in `block in to_param': undefined method `to_query' for "myusername":String (NoMethodError)
    from /var/lib/gems/1.9.1/gems/namecheap-0.1.2/lib/monkey_patch.rb:13:in `each'
    from /var/lib/gems/1.9.1/gems/namecheap-0.1.2/lib/monkey_patch.rb:13:in `collect'
    from /var/lib/gems/1.9.1/gems/namecheap-0.1.2/lib/monkey_patch.rb:13:in `to_param'
    from /var/lib/gems/1.9.1/gems/namecheap-0.1.2/lib/namecheap/api.rb:15:in `api_call'
    from /var/lib/gems/1.9.1/gems/namecheap-0.1.2/lib/namecheap/domains.rb:5:in `get_list'
    from ./chkdn.rb:15:in `<main>'

知道有什么问题吗?

4

1 回答 1

3

剧透:这个 gem 只能在 Rails 项目中正常工作

据我所知,这是 namecheap gem 中的一个错误。Gem 作者从 rails activesupport 复制了核心扩展部分,以便将哈希转换为 URL 参数。然而,他或她忘记了这个特定的函数依赖于为许多可能的类定义的函数,这些函数可能用作散列中的值并转换为 URL 参数(参见所有这些定义)。

这正是您收到此错误的原因:

undefined method `to_query' for "myusername":String

它确实不是为 String 定义的。但是,如果您使用 Rails,它将开箱即用(因为它显然是在那里定义的)。如果你不打算使用 Rails,你的选择是:

  • 将此文件的内容复制到项目中的某个位置(您可能想跳过最后一个类 Hash,因为它已经在 namecheap gem 中进行了修补)
  • 安装activesupport gem并需要'active_support/core_ext/object/to_param'或'active_support/core_ext'(后者将包括所有核心扩展)
于 2013-05-07T19:00:30.943 回答