2016-07-07 2 views
2

방금 ​​요리사를 사용하기 시작했으며 무엇인가하기 전에 파일이 있는지 먼저 확인하는 방법을 알아 내려고합니다. 내가 처음 여부를 확인하는 abilty을하고 싶습니다, 그러나요리사 레시피 파일이 존재하는지 확인하는 방법

file '/var/www/html/login.php' do 
    action :delete 
end 

:

은 내가 프로덕션 서버에 대한 로그인 파일을 제거하고있어 내 현재 사용 사례, 예에 대한 파일 부분을 가지고 파일이있다, 예. 언급 한 바와 같이

삭제 조치에 대한 코멘트에서 언급 한 바와 같이
if (file_exists === true) 
    file '/var/www/html/login.php' do 
     action :delete 
    end 
end 
+0

왜이 기능이 필요합니까? 요리사가 시스템의 원하는 상태가 설명 된 상태와 같은지 확인하지 않고 원하는 상태가 다른 경우에만 변경합니다. 실제 문제 또는 오류 메시지가 지금 해결하려고합니까? –

+0

안녕하세요 @DavidGrayson 응답 해 주셔서 감사합니다. 나는 요리사가 처음이에요. 그래서 당신 생각에 맞을지 모릅니다. 현재 어떤 오류나 이슈를 얻지는 못했지만 조건문을 작성하는 데 익숙해서 옳은 일처럼 보였습니다. 이것은 제가 생각하는 결함 일 수 있습니다. 여전히 최상의 방법을 알고 있습니다. 어떻게 요리사가 운영됩니다. 이 경우 파일이 있는지 확인할 필요가 없습니까? 파일이 존재하지 않고 그 파일을 지우려고 시도하는 요리법을 아직도 실행 중이라면 어떤 종류의 오류도 발생하지 않는다는 것을 의미합니까? – Corey

+0

저는 요리사와 파일을 삭제하지 않지만, "if"문을 만들 필요가 없으므로 삭제할 때 "if"문이 필요한 이유를 알지 못합니다. –

답변

7

if 문은 요리사가 파일을 찾을 수없는 경우 삭제 될 수 있기 때문에, 그것은 이미 삭제 된 가정합니다, 필요하지 않습니다.

그렇지 않으면 일반적으로 guard properties을 리소스에 사용하려는 경우 (모든 리소스에서 사용 가능) if-then에 리소스를 래핑하지 말아야합니다.

file '/var/www/html/login.php' do 
    only_if { ::File.exist?('/var/www/html/login.php') } 
    action :touch 
end 

는 그리고 당신은 아마도 the Ruby File class methods을 숙지하고 싶다.

+0

감사합니다 카렌, 이것은 매우 도움이됩니다. – Corey

+0

아래와 같이 중복됩니다. 파일이 존재하지 않으면'file' 리소스는 이미': delete' 액션을 위해 아무것도하지 않습니다. – coderanger

2

주방장의 기본 생각은 시스템의 원하는 상태를 진술 한 다음 요리사가이를 실제 상태와 비교하고 시스템을 원하는 상태로 만드는 데 필요한 모든 변경을 수행하는 것입니다. 파일을 삭제하기 전에 파일이 존재하는지 확인하기 위해 if 문을 사용할 필요는 없습니다. 요리사가 내가 실수하지 않으면 파일이 있는지 확인해야합니다.

+0

설명해 주셔서 감사합니다. 셰프가 인프라를 갖추기를 원하는 국가에 대한 선언적 설명이기 때문에 내 사고 방식을 계속 바꿔야 할 필요가있는 것처럼 보입니다. – Corey