Một điều cần chỉ ra - nếu node['environment']
chưa được đặt, ví dụ của bạn sẽ thất bại. Đây là đầu ra tôi nhận được:
[Tue, 16 Oct 2012 02:40:31 +0000] INFO: Starting Chef Run for vagrant.int.housepub.org
[Tue, 16 Oct 2012 02:40:31 +0000] INFO: Running start handlers
[Tue, 16 Oct 2012 02:40:31 +0000] INFO: Start handlers complete.
[Tue, 16 Oct 2012 02:40:31 +0000] ERROR: Running exception handlers
[Tue, 16 Oct 2012 02:40:31 +0000] ERROR: Exception handlers complete
[Tue, 16 Oct 2012 02:40:31 +0000] FATAL: Stacktrace dumped to /tmp/vagrant-chef-1/chef-stacktrace.out
[Tue, 16 Oct 2012 02:10:38 +0000] FATAL: NoMethodError: undefined method `[]' for nil:NilClass
Nhưng điều đó không hữu ích lắm, và nó không phải lúc nào cũng đủ. Có lẽ bạn muốn làm một số xác nhận thêm của thuộc tính. Trong trường hợp đó, bạn có thể đặt một cái gì đó như thế này vào công thức của bạn:
unless node['environment']['url'] && node['environment']['url'].size > 5
Chef::Application.fatal!("The URL attribute isn't long enough.")
end
Bây giờ, đầu bếp chạy sẽ cung cấp cho bạn một thông điệp hữu ích hơn khi thất bại:
[Tue, 16 Oct 2012 02:41:36 +0000] INFO: Starting Chef Run for vagrant.int.housepub.org
[Tue, 16 Oct 2012 02:41:36 +0000] INFO: Running start handlers
[Tue, 16 Oct 2012 02:41:36 +0000] INFO: Start handlers complete.
[Tue, 16 Oct 2012 02:41:36 +0000] FATAL: The URL attribute isn't long enough.
[Tue, 16 Oct 2012 02:41:36 +0000] ERROR: Running exception handlers
[Tue, 16 Oct 2012 02:41:36 +0000] ERROR: Exception handlers complete