我们想要导出我们的ELB配置以便重复使用。我可以通过以下方式获得ELB配置:
all_elbs = Fog::AWS::ELB.load_balancers.all()
但这会导致失败:
all_policies = Fog::AWS::ELB.policies.all()
#=> /Library/Ruby/Gems/2.0.0/gems/fog-aws-0.0.6/lib/fog/aws/models/elb/policies.rb:20:
#=> in `munged_data': undefined method `reduce' for nil:NilClass (NoMethodError)
最终,我希望能够基于现有的ELB重新创建ELB。
答案 0 :(得分:0)
该错误消息表示在policies.rb
的第20行,有foo.reduce
和foo
等代码恰好是nil
。
如果我们查看gem的源代码,我们会看到:
def munged_data
data.reduce([]){ |m,e| # line 20
因此,问题是调用data
方法时nil
为munged_data
。我们在同一文件的第8行看到data
是通过简单的attr_accessor
调用定义的。我无法确定应该在哪里设置。 (gem中有227个@data =
或data =
个实例。)这似乎是AWS gem中的一个错误,除非您在调用.all
policies
之前调用某个方法。 1}}。
进一步追踪,我们发现第154行的policies
中定义load_balancer.rb
为:
def policies
Fog::AWS::ELB::Policies.new({
:data => policy_descriptions,
:service => service,
:load_balancer => self
})
end
假设传递给方法的data
直接用作@data
实例变量,那么问题是policy_descriptions
返回nil
。
policy_descriptions
的实施是:
def policy_descriptions
requires :id
@policy_descriptions ||= service.describe_load_balancer_policies(id).body["DescribeLoadBalancerPoliciesResult"]["PolicyDescriptions"]
end
如果service.describe_load_balancer_policies(id).body["DescribeLoadBalancerPoliciesResult"]
返回nil
(或任何没有[]
方法的对象),则此方法会抛出错误。所以,我的推论是,这返回了类似哈希的东西,但该哈希没有"PolicyDescriptions"
密钥。
从那里......我不知道。