Capistrano3에서 Symfony2를 배포하면 app/cache 아래에 쓸 수 없어 몇 시간 빠졌습니다.
8390 단어 심포니Capistrano
소개
[UNMAINTAINED]
가 된 Capistrano2
+ Capifony
플러그인에서 Capistrano3
+ capistrano/symfony
플러그인으로 전환하면 캐시 주위에서 몇 시간 빠졌습니다.무슨 일이 있었는지
Capistrano3
+ capistrano/symfony
플러그인으로 전환하고 배포한 직후에 액세스할 때 Apache
가 아래와 같은 오류를 토했습니다.request.CRITICAL: Exception thrown when handling an exception (InvalidArgumentException: The directory "{/path/to/app}/releases/{timestamp}/app/cache/prod/jms_serializer" is not writable. at {/path/to/app}/releases/{timestamp}/vendor/jms/metadata/src/Metadata/Cache/FileCache.php line 17) {"exception":"[object] (InvalidArgumentException(code: 0): The directory \"{/path/to/app}/releases/{timestamp}/app/cache/prod/jms_serializer\" is not writable. at {/path/to/app}/releases/{timestamp}/vendor/jms/metadata/src/Metadata/Cache/FileCache.php:17)"} []
앞에 둡니다만,
jms_serializer
는 무관합니다.다른 라이브러리도 마찬가지로
app/cache
에 쓸 수 없어 오류를 토합니다.app/cache는 0777로 설정되어야 합니다.
config/deploy.rb
에는, 아래와 같이, app/cache
를 0777
로 하고 있을 생각이었습니다.# config/deploy.rb
# Set correct permissions between releases, this is turned off by default
set :file_permissions_paths, ["app/cache"]
set :file_permissions_users, ["apache"]
set :file_permissions_chmod_mode, "0777"
set :permission_method, :acl
after "deploy:updated", "deploy:set_permissions:acl"
심포니 적으로는 ACL을 사용해야합니다.
파일 사용 권한은 Symfony의 공식 문서에 자세히 설명되어 있습니다.
$ HTTPDUSER=$(ps axo user,comm | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1)
# # if this doesn't work, try adding `-n` option
$ sudo setfacl -R -m u:"$HTTPDUSER":rwX -m u:$(whoami):rwX var
$ sudo setfacl -dR -m u:"$HTTPDUSER":rwX -m u:$(whoami):rwX var
setfacl
명령은 웹 서버의 실행 사용자 (apache, www-data 등)와 권한을 설정하는 사용자 ($ (whoami)) 모두에게 전체 액세스를 제공하는 명령 예제를 제공합니다.setfacl이 실행 중입니다.
Capistrano::FilePermissions
의 README 을 보면 아래와 같이 명령을 실행하고 있다고 설명합니다.[..] setfacl -Rn -m u:www-data:rwX -m u:<deploy-user>:rwX <path-to-app>/shared/app/logs <path-to-app>/<release>/app/cache
실제로 배포시 콘솔 로그를 보면 아래와 같이
setfacl
명령이 실행되고 있습니다.00:06 deploy:set_permissions:acl
01 setfacl -Rn -m u:{web server user}:rwX -m u:{deploy user}:rwX {/path/to/app}/releases/{timestamp}/app/cache
✔ 01 {deploy user}@{web server} 0.047s
02 setfacl -dRn -m u:{web server user}:rwX -m u:{deploy user}:rwX {/path/to/app}/releases/{timestamp}/app/cache
✔ 02 {deploy user}@{web server} 0.047s
그러나 권한은 0777이 아닙니다.
확인해 보면 권한은
0777
로 되어 있지 않다는 것을 알 수 있습니다.[{deploy user}@{web server} {/path/to/user}]$ ls -la current/app/cache
drwxr-xr-x+ 3 {deploy user} {group} 4096 5 25 19:42 2017 .
drwxr-xr-x 5 {deploy user} {group} 4096 5 25 19:42 2017 ..
drwxr-xr-x+ 9 {deploy user} {group} 4096 5 25 19:42 2017 prod
[{deploy user}@{web server} {/path/to/user}]$ getfacl current/app/cache/*
# file: current/app/cache/prod
# owner: {deploy user}
# group: {group}
user::rwx
group::r-x
other::r-x
알려진 문제입니다.
이상하네요. 하지만 이건 모두 밟고 있는 지뢰인가? 그래서 Github을 보면 다음 PR을 발견했습니다.
자세한 것은 이해하고 있지 않습니다만, 아무래도,
setfacl
의 n
옵션이 불필요했던 것 같습니다.어, 이거,
Merged
되어 있지만...수정되었지만 출시되지 않았습니다.
그래, 이 PR이 병합된 것은,
2016-6-29
로, 최신의 capistrano-file-permissions 1.0.0
는, 2016-1-15
그대로입니다.이것을 깨닫는 데는 또 한 시간이 걸렸습니다.
그래서, 빨리 릴리스 해 주는 이슈가
2017-5-3
에 벌써 끊어졌습니다.umask를 사용하여
ACL에 의한 파일 권한을 포기하게 되면,
umask
를 사용하는 방법이 Symfony의 공식으로 소개되고 있습니다.If none of the previous methods work for you, change the umask so that the cache and log directories are group-writable or world-writable (depending if the web server user and the command line user are in the same group or not).
To achieve this, put the following line at the beginning of the bin/console, web/app.php and web/app_dev.php files:
bin/console
(symfony2는 app/console
), web/app.php
실제로,
web/app_dev.php
에도 아래의 코멘트가 이미 채워져 있거나 합니다.// app/console
// if you don't want to setup permissions the proper way, just uncomment the following PHP line
// read http://symfony.com/doc/current/book/installation.html#configuration-and-setup for more information
umask(0000); // 今回ここのコメントを解除しました
결론
정리하면, 이하 2개의 대응을 하는 것으로
umask(0000);
에 기입할 수 없는 문제를 회피했습니다.0777
app/console
, app/cache
, Capistrano
의 맨 위에 deploy:set_permissions:acl
전 세계 Symfony 사용자를 위해
app/console
의 새 버전이 출시되기를 바랍니다.(모두, umask 사용하고 있는 것일까. 혹시 상식?)
그럼.
Reference
이 문제에 관하여(Capistrano3에서 Symfony2를 배포하면 app/cache 아래에 쓸 수 없어 몇 시간 빠졌습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/imunew/items/c40b1e4b8d0b980dd007텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)