2013-08-27 5 views
3

내가 before_migrate 단계에 관한 요리 책을 배포 opsworks로 일부 사용자 지정 코드를 추가하려고 해요 배포 내 사이트 요리 책 패키지에 요리 책을 배포, 나는 요리사 오류 얻을 : 내 요리 책의는 요리 책 불변의 객체가 오류

[2013-08-27T16:45:05+00:00] FATAL: Chef::Exceptions::ImmutableAttributeModification: ruby_block[Compile Custom OpsWorks Run List] (opsworks_custom_cookbooks::execute line 3) had an error: Chef::Exceptions::ImmutableAttributeModification: Node attributes are read-only when you do not specify which precedence level to set. To set an attribute use code like `node.default["key"] = "value"' 

내가 확인한 것도 잘못된 노드 설정이 없습니다를, 그래서 문제가 될 수 있는지의 아이디어에서입니다. 나는이 오류를 디버깅하기가 매우 어렵다는 것을 알고 있으며 수정하지 않고이 요리 책을 포함 할 때도이 오류가 발생합니다. 저를 올바른 방향으로 가르키면 알려주십시오.

답변

1

셰프에는 속성에 여러 가지 우선 순위 값이 있으며, 가장 자주 사용되는 것은 아마도 기본값이며 재정의됩니다. http://docs.opscode.com/chef_overview_attributes.html 노드 [ 'something'] 만 지정하여 속성을 설정할 위치를 찾아야합니다. 그것은 당신이 붙여 넣은 코드에있는 것 같지 않습니다.

3

셰프 11부터는 속성이 우선 순위를 지정해야합니다. 요리사 (10)에서이 같은 뭔가를 할 수 :

node['foo']['bar'] = 'my new value' 

을 요리사 (11)에서는 그 값에 대한 우선 순위 레벨을 지정해야합니다

node.set['foo']['bar'] = 'my new value' 

또한 사용할 수 있습니다 defaultoverride (이 attribute precedence levels에 해당합니다

node.default['foo']['bar'] = 'my new value' 
node.override['foo']['bar'] = 'my new value' 

내가 사용하는 요리 책 (또는 종속 요리 책을) 의심 더 이상 사용되지 않는 구문을 사용하여 노드 객체에 데이터를 설정하고 있습니다.