배포 스크립트의 마지막 단계 중 하나는 의 모든 PHP 파일이 suphp
요구 사항을 충족해야합니다. 배포 스크립트에서 우리는이 : 우리가 잘 작동 서버에서 수동으로 명령을 실행하면Capistrano에서 파일 사용 권한을 업데이트하면 '인수 목록이 너무 길다.'
* executing "find /srv/www/xyz/ -type f -name \"*.php\" -print0 | xargs -0 sudo chmod 600"
servers: ["www.xyz.net"]
[www.xyz.net] executing command
*** [err :: www.xyz.net] sudo
*** [err :: www.xyz.net] :
*** [err :: www.xyz.net] unable to execute /bin/chmod: Argument list too long
*** [err :: www.xyz.net]
command finished in 333ms
failed: "sh -c 'find /srv/www/xyz/ -type f -name \"*.php\" -print0 | xargs -0 sudo chmod 600'" on www.xyz.net
:
run "find /srv/www/xyz/ -type f -name \"*.php\" -print0 | xargs -0 sudo chmod 600"
그러나 우리는 다음과 같은 오류가 발생 배포 할 때. Capistrano를 실행할 때 왜이 오류가 발생하는지 이해하는 사람이 있을까요? 카피 스트라 노에서 다음과 같이 파이프 될 때
sudo
가 작동하면 것인지도 확실하지
run "find /srv/www/xyz/ -type f -name \"*.php\" -print0 | xargs -0 sudo chmod 600"
:
감사합니다. Jake. 배포 사용자가 필요한 권한을 가지고 있지 않으므로 sudo가 필요합니다 (우리는없이 시도했지만 실패했습니다). 그러나 sudo를 사용하여 명령의 버전으로 변경하면 일관되게 3 번 작동합니다. 문제가 무엇이라고 생각합니까? – Michelle
@Michelle 암호없이'sudo' 설정을했기 때문에'sudo'가 효과가 있었다고 가정합니다. 내 최신 편집을 참조하십시오. 그러나 당신은 "우리가 sudo로 명령의 버전으로 바꿨을 때 그것은 3 번 일관되게 일했습니다. 문제가 무엇이라고 생각합니까?"그렇다면 원래의'-name \"*. php \ "'설정이 초초라고 생각합니다. '-name "* .php"로 이스케이프 된 따옴표를 없애 버리거나 그냥'-iwholename '* .php *' '를 사용하는 것이 더 좋은 해결책 일 수 있습니다. 나는 항상'iwholename'을 문제없이 사용했습니다. – JakeGould
@Michelle 무슨 일이 있었는지 알 것 같습니다. 이스케이프 된 따옴표는'-name \ "*. php \"의 컨텍스트에서 실행되도록 설정합니다. 그러나 이것은'-name '* .php와 같이 작은 따옴표를 사용하도록 변경 될 수 있습니다. 어느 것이'-iwholename '* .php *''에도 사용됩니다. 나는 도망 쳤던 따옴표와'run'이 좋은 플레이를하지 못한다는 것을 확신합니다. 그래서 문제가 해결되었습니다! – JakeGould