Đây là mảnh của tôi về Ruby trong một công thức Chef:Kiểm tra cho thư mục hiện có thất bại trong Ruby + Chef
# if datadir doesn't exist, move over the default one
if !File.exist?("/vol/postgres/data")
execute "mv /var/lib/postgresql/9.1/main /vol/postgres/data"
end
Kết quả là:
Executing mv /var/lib/postgresql/9.1/main /vol/postgres/data
mv: inter-device move failed: `/var/lib/postgresql/9.1/main' to `/vol/postgres/data/main'; unable to remove target: Is a directory
Tôi biết rằng /vol/postgres/data
tồn tại và là một thư mục , nhưng nó vẫn cố gắng thực hiện mv
. Tại sao?
Chỉ cần chắc chắn, chạy kịch bản Ruby độc lập sau trên kết quả đầu ra cùng một máy "nomv":
if !File.exist?("/vol/postgres/data")
print "mv"
else
print "nomv"
end
Hmm ... Nếu đó là Đầu bếp, hãy thử '! :: File.exist? ...'. Nó có thể được trộn với Chef :: Provider :: File. –
@DracoAter Tôi đã hy vọng đó là nó, nhưng tôi đã cố gắng, và tiếc là nó làm cho không có sự khác biệt. –