Composer의 개발/실가동 스위치를 사용할 때 올바르게 전개하는 방법
Composer는 개발 중에만 여러 종속성을 로드하는 옵션이 있으므로 실제 가동 중인 서버에는 도구가 설치되지 않습니다.이것은 (이론적으로) 테스트, 가짜 데이터 툴, 디버거 등 개발에서만 의미가 있는 스크립트에 매우 편리합니다.
은 하나 더 거예요.require-dev
dev에 .
"require-dev": {
"codeception/codeception": "1.6.0.3"
}
그런 다음 (이론적으로) 이러한 의존성을 로드합니다.
composer install --dev
문제와 질문:
가 Composer의 했습니다.install
★★★★★★★★★★★★★★★★★」update
require-dev
. -dependencies는 composer.json을 자유롭게 .require-dev
composer install
재현할 수 있습니다.
가장 일반적인 전개 방법은 composer.lock(현재 컴포저 셋업을 유지하는 것)을 푸시하고 나서composer install
실가동 서버상에, 이것에 의해서 개발 물건도 인스톨 됩니다.
-dev 의존관계를 설치하지 않고 이를 도입하는 올바른 방법은 무엇입니까?
주의: 여기에서 이상한 Composer의 전개를 명확히 하기 위해 표준 Q/A를 작성하려고 합니다.이 질문은 자유롭게 편집해 주세요.
왜죠
Composer를 하는 데는 .--dev
(설치 및 업데이트 시) 플래그를 디폴트로 설정합니다.Composer는 주로 다음과 같은 동작이 필요한 시나리오에서 실행됩니다.
기본 Composer 워크플로우는 다음과 같습니다.
- 새새젝트 a a a a a a a a a a 。
composer.phar install --dev
및에 커밋됩니다json은 VCS에 커밋됩니다. - 가 프로젝트를 합니다: 아웃 및 VCS의 체크 아웃.
composer.phar install --dev
. - 의존관계를 합니다.
composer.phar require <package>
, 더하다--dev
한require-dev
section ( 밋))) 。 - 을 하고) 또 다른 (을 하고)
composer.phar install --dev
. - 가 새로운 .
composer.phar update --dev <package>
(동료) - 을 하고) 또 다른 (을 하고)
composer.phar install --dev
. - 전개됩니다.
composer.phar install --no-dev
--dev
는 flag보다 멀리)됩니다.--no-dev
특히 프로젝트에 종사하는 개발자의 수가 증가할 때 플래그를 사용합니다.
실가동 환경 도입
"dev" 의존관계를 설치하지 않고 이를 도입하는 올바른 방법은 무엇입니까?
아, 아...composer.json
★★★★★★★★★★★★★★★★★」composer.lock
VCS를 사용하다composer.lock
사용해야 하는 패키지 패키지에 대한 중요한 정보가 포함되어 있기 때문입니다.
전개 시, 「」를 수 .--no-dev
작자에 자래작 :
composer.phar install --no-dev
composer.lock
dev-interminal을 사용하다츠미야--no-dev
flag (dev-install)을 설정합니다.
「실가동 전개」라고 하는 것은, 실가동에서의 사용을 목적으로 한 전개입니다..composer.phar install
실가동 서버 또는 검토가 가능한 스테이징 서버에서 수행해야 합니다.그것은 이 답변의 범위가 아니다.단지 좋을지 하고 있을 뿐이다.composer.phar install
"dev"하지 않고.dev"를 선택합니다
오프토픽
--optimize-autoloader
플래그는 실제 가동 시에도 바람직할 수 있습니다(클래스 맵을 생성하여 응용 프로그램의 자동 로딩 속도를 높입니다).
composer.phar install --no-dev --optimize-autoloader
또는 자동 도입이 이루어지는 경우:
composer.phar install --no-ansi --no-dev --no-interaction --no-plugins --no-progress --no-scripts --optimize-autoloader
되고 있는 「 아웃」을 할 수 .--optimize-autoloader
★★★★★★에--classmap-authoritative
자세한 내용은 이쪽
실제로 프로덕션 서버에 종속성을 설치하지 않는 것이 좋습니다.
도입 머신에서 코드를 체크 아웃 해, 필요에 따라서 의존 관계를 인스톨 하고(코드가 실가동하는 경우는 Dev 의존 관계를 인스톨 하지 않는 것도 포함한다), 모든 파일을 타겟 머신으로 이동하는 것을 추천합니다.
왜요?
- 공유 호스팅에서 명령줄에 액세스하지 못할 수 있습니다.
- PHP는 명령어, 메모리 또는 네트워크 액세스의 관점에서 제한될 수 있습니다.
- 저장소 CLI 도구(Git, Svn)가 설치되지 않을 수 있습니다.잠금 파일이 특정 커밋을 ZIP으로 다운로드하지 않고 체크 아웃하는 종속성을 기록하면 실패합니다(사용자가 --prefer-source를 사용했거나 Composer가 해당 버전을 가져올 다른 방법이 없음).
- 서버에 아마 할 수 없을 입니다.
composer install
- 작곡가가 중단하지 않으려고 하는 동안 Composers 설치 단계에서 랜덤 의존성을 로드할 수 없었기 때문에 부분적으로 손상된 프로덕션 웹 사이트로 종료하는 것에 대해 어떻게 생각하십니까?
요약하면 Composer는 제어할 수 있는 환경에서 사용합니다.Composer를 조작하는 데 필요한 모든 것을 이미 갖추고 있기 때문에 개발 머신이 적격입니다.
-dev 의존관계를 설치하지 않고 이를 도입하는 올바른 방법은 무엇입니까?
사용하는 명령어는 다음과 같습니다.
composer install --no-dev
이 기능은 실제 소프트웨어에서 개발 요건이 잘못 사용되는지 여부를 확인하기 위해 마지막으로 확인해야 하는 운영 서버 자체, 배포 시스템 또는 개발 시스템 등 모든 환경에서 작동합니다.
명령어는 composer.lock 파일에 선언된 개발 요건을 설치 또는 제거하지 않습니다.
에 개발 소프트웨어 컴포넌트를 이 문제가 않는 는, 「」를 실행해 주세요.composer install
이동되는 바이트 수를 늘리고 더 큰 오토로더 선언을 작성하기만 하면 됩니다.
, 이제require-dev
하게 되어 는, 「로컬 개발」을 할 수 있습니다.로컬 개발의 경우는, 다음과 같이 할 수 있습니다.composer install
★★★★★★★★★★★★★★★★★」composer update
★★★★★★★★★★★★★★★★★ --dev
★★★★★★ 。
가동에 도입할 필요가 있습니다.composer.lock
doesn터 that 에서 온 .require-dev
다음과 같이 할 수 있습니다.
composer update --no-dev
★★★★★★★★★★★★로 테스트 완료 후--no-dev
가동 환경에 하고, 「」에 할 수 .composer.lock
★★★★★★★★★★★★★★★★★★★★★★★★.--no-dev
여기서 옵션을 다시 선택합니다.그렇지 않으면 컴포넌트는 "잠금 파일에 require-dev 정보가 포함되어 있지 않습니다."라고 말합니다.
composer install --no-dev
주의: 개발과 생산의 차이를 일으킬 가능성이 있는 것은 모두 주의해 주십시오.개발 도구를 포함하면 큰 오버헤드가 발생하지 않기 때문에 가능한 한 require-dev를 피하려고 합니다.
프로세스를 자동화하는 것이 좋다고 생각합니다.
git 저장소에 composer.lock 파일을 추가하여 반드시 composer를 사용하십시오.par install --no-dev는 출시할 때 사용하시는 개발 머신에서는 어떤 composer 명령어도 문제없이 사용할 수 있습니다.이것은 실가동되지 않습니다.실가동파일에 의존관계가 기초가 됩니다.
서버에서 이 특정 버전 또는 라벨을 확인하고 모든 테스트를 실행한 후 앱을 교체합니다. 테스트에 합격하면 배포를 계속합니다.
테스트가 Dev 의존성에 의존하는 경우 Composer에는 테스트 범위의 의존성이 없기 때문에 그다지 우아하지 않은 솔루션을 Dev 의존성(Composer)을 사용하여 테스트를 실행할 수 있습니다.par install), 벤더 라이브러리를 삭제하고 composer를 실행합니다.par install --no-dev. 이렇게 하면 캐시된 종속성이 사용되므로 더 빠릅니다.그러나 다른 빌드 툴의 스코프 개념을 알고 있다면 이는 해킹입니다.
자동화하고 나머지는 잊어버리고 맥주나 마시러 가자:-)
PS.: @Sven 코멘트 아래처럼 composer.lock 파일을 체크하지 않는 것은 좋지 않습니다.이것에 의해, composer 의 인스톨이 composer 업데이트로서 기능하게 되기 때문입니다.
이 자동화는 http://deployer.org/에서 실행할 수 있습니다.이것은 간단한 툴입니다.
프로덕션 서버에서 이름 변경vendor
로.vendor-<datetime>
및 배치 중에는 2개의 벤더 디르가 있습니다.
HTTP 쿠키에 의해 시스템이 새로운 벤더를 선택한다.autoload.php
테스트 후 이들 간에 완전 아토믹/인스턴트스위치를 실행하여 이후의 모든 요구에 대해 오래된 벤더 dir를 디세블로 하고 며칠 후 이전 dir를 삭제합니다.
이렇게 하면 apache/php에서 사용하고 있는 파일 시스템 캐시로 인해 발생하는 문제를 방지할 수 있으며, 또한 활성 PHP 코드가 이전 벤더 dir를 계속 사용할 수 있습니다.
반대되는 다른 답변에도 불구하고 저는 개인적으로 달리기를 합니다.composer install
이 속도는 스테이징 영역(노트북의 VM)의 rsync보다 빠르기 때문입니다.
사용하고 있다--no-dev --no-scripts --optimize-autoloader
. 각각의 문서를 읽고 이것이 환경에 적합한지 확인해야 합니다.
언급URL : https://stackoverflow.com/questions/21721495/how-to-deploy-correctly-when-using-composers-develop-production-switch
'programing' 카테고리의 다른 글
MariaDb 마스터 슬레이브(페일오버 포함) (0) | 2022.10.27 |
---|---|
모든 JavaScript 프로그래머가 알아야 할 것은 무엇입니까? (0) | 2022.10.27 |
C auto 키워드는 어디에서 사용됩니까? (0) | 2022.10.18 |
로케이션 해시의 변경을 검출하려면 어떻게 해야 합니까? (0) | 2022.10.18 |
Angular의 라이프 사이클은 어떻게 됩니까?JS 컨트롤러? (0) | 2022.10.18 |