我正在尝试生成一个ruby控制台脚本来进行namebeach api调用。我找到了namecheapgem并使用sudo gem install namecheap
安装了它。
我编写了测试脚本,隐藏了密钥、用户名和客户端:
#!/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版本:
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>'
知道怎么了吗?
最佳答案
扰流器:这个宝石只有在轨道项目中才能正常工作
据我所见,这是一个臭虫在名便宜的宝石。gem作者从rails activesupport复制了core extension的部分,以便将散列转换为url参数。但是他或她忘记了这个特定的函数依赖于为许多可能的类定义的函数,这些函数可能被用作散列中的值并转换为url参数(参见all these definitions)。
这就是为什么你会犯这个错误:
undefined method `to_query' for "myusername":String
它确实不是为字符串定义的。但是,如果您使用rails,它将是开箱即用的(因为它显然是在那里定义的)。如果您不打算使用rails,您可以选择:
将this file的内容复制到项目中的某个位置(您可能希望跳过最后一个类hash,因为它已经在namebeach gem中修补过了)
安装active support gem并要求“active_support/core_ext/object/to_param”或“active_support/core_ext”(后者将包括所有核心扩展)