Ruby 如何导出现有AWS ELB策略?未定义的方法';减少';

Ruby 如何导出现有AWS ELB策略?未定义的方法';减少';,ruby,amazon-web-services,fog,Ruby,Amazon Web Services,Fog,我们希望导出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':

我们希望导出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。

该错误消息意味着在
policies.rb
的第20行有类似
foo.reduce
的代码,而
foo
恰好是
nil

如果我们查看gem的源代码,我们会看到:

def munged_data
  data.reduce([]){ |m,e|  # line 20
因此,问题是调用
munged_data
方法时,
data
nil
。我们在同一文件的第8行看到,
data
是通过一个简单的
attr\u访问器
调用定义的。我不能确定应该在哪里设置。(gem中有227个
@data=
data=
实例。)这似乎是AWS gem中的一个bug,除非您在调用
之前应该调用某个方法。所有
策略上的


进一步追踪,我们发现第154行的
负载平衡器.rb
中定义了
策略

def policies
  Fog::AWS::ELB::Policies.new({
    :data => policy_descriptions,
    :service => service,
    :load_balancer => self
  })
end
假设传递给方法的
数据
直接用作
@data
实例变量,那么问题在于
策略描述
返回了
nil

政策描述的实施是:

def policy_descriptions
  requires :id
  @policy_descriptions ||= service.describe_load_balancer_policies(id).body["DescribeLoadBalancerPoliciesResult"]["PolicyDescriptions"]
end
如果
service.description\u load\u balancer\u policies(id).body[“descripeLoadBalancerPolicysResult”]
返回
nil
(或任何没有
[]
方法的对象),此方法将引发错误。因此,我的推论是,这返回了类似于散列的内容,但该散列没有
“PolicyDescriptions”

从那里…我不知道