programing

Composer의 개발/실가동 스위치를 사용할 때 올바르게 전개하는 방법

bestcode 2022. 10. 18. 22:53
반응형

Composer의 개발/실가동 스위치를 사용할 때 올바르게 전개하는 방법

Composer는 개발 중에만 여러 종속성을 로드하는 옵션이 있으므로 실제 가동 중인 서버에는 도구가 설치되지 않습니다.이것은 (이론적으로) 테스트, 가짜 데이터 툴, 디버거 등 개발에서만 의미가 있는 스크립트에 매우 편리합니다.

은 하나 더 거예요.require-devdev에 .

"require-dev": {
    "codeception/codeception": "1.6.0.3"
}

그런 다음 (이론적으로) 이러한 의존성을 로드합니다.

composer install --dev

문제와 질문:

가 Composer의 했습니다.install ★★★★★★★★★★★★★★★★★」updaterequire-dev. -dependencies는 composer.json을 자유롭게 .require-devcomposer 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>, 더하다--devrequire-devsection ( 밋))) 。
  • 을 하고) 또 다른 (을 하고)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.lockVCS를 사용하다composer.lock사용해야 하는 패키지 패키지에 대한 중요한 정보가 포함되어 있기 때문입니다.

전개 시, 「」를 수 .--no-dev작자에 자래작 :

composer.phar install --no-dev

composer.lockdev-interminal을 사용하다츠미야--no-devflag (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.lockdoesn터 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

반응형