Ruby 如何导出现有AWS ELB策略?未定义的方法';减少';
我们希望导出ELB配置以供重复使用。我可以通过以下方式获得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':
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”
键
从那里…我不知道