2014-02-16 1 views
8

작곡가를 사용하여 Laravel 4 프로젝트 중 하나에 어제 aws/aws-sdk-php을 설치하려고했으나 정확히 일련의 이벤트는 기억이 나지 않지만 성공적으로 설치되지 않았습니다. 그 이후로, 저는 작곡가가 메모리가 부족한 오류를 받았습니다. - Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 32 bytes) in phar:///usr/local/bin/composer/src/Composer/DependencyResolver/RuleWatchGraph.php on line 52.작곡가가 모든 프로젝트에서 메모리가 부족합니다. Mac OS X

php.ini memory_limit을 -1로 늘 렸습니다. 이것은 개발 및 프로덕션 환경 (프로덕션 환경에서는 CentOS 6)에서 여전히 발생합니다. composer_update을 실행할 때 CLI를 통해 memory_limit을 증가 시키면 설치가 완료되지만 영원을 필요로합니다.

Composer가 메모리 부족을 방지하기 위해 제거해야 할 일종의 캐시가 있습니까? 작곡가 업데이트를 실행할 때마다 AWS SDK를 설치하려고하고 있다는 느낌이 들었습니다.

작곡가 파일

{ 
    "name": "laravel/laravel", 
    "description": "The Laravel Framework.", 
    "keywords": ["framework", "laravel"], 
    "license": "MIT", 
    "require": { 
     "laravel/framework": "4.0.*", 
     "rtablada/package-installer": "dev-master", 
     "mogreet/mogreet-php": "dev-master", 
     "twilio/laratwilio": "dev-master", 
     "balloon/elephant.io": "dev-master", 
     "facebook/php-sdk": "dev-master", 
     "way/generators": "dev-master", 
     "codesleeve/asset-pipeline": "dev-master", 
     "natxet/CssMin": "dev-master" 
    }, 
    "autoload": { 
     "classmap": [ 
      "app/commands", 
      "app/controllers", 
      "app/models", 
      "app/database/migrations", 
      "app/database/seeds", 
      "app/tests/TestCase.php", 
      "app/libraries" 
     ] 
    }, 
    "scripts": { 
     "post-install-cmd": [ 
      "php artisan optimize" 
     ], 
     "pre-update-cmd": [ 
      "php artisan clear-compiled" 
     ], 
     "post-update-cmd": [ 
      "php artisan optimize" 
     ], 
     "post-create-project-cmd": [ 
      "php artisan key:generate" 
     ] 
    }, 
    "config": { 
     "preferred-install": "dist" 
    }, 
    "minimum-stability": "dev" 
} 
+0

나는이 문제를 조사하고 싶습니다 - 당신은 당신이하려고하는 작곡가 파일을 게시 할 수 있습니다 실행 중이거나 현재 개인적인 것을 사용하는 경우 수정 된 버전입니다. – Danack

+0

물론입니다. 두 가지 프로젝트, AWS SDK를 설치하려고 시도한 프로젝트와 내가하지 않은 프로젝트가 있습니다. 내가 시도한 것을 게시 할 것입니다 – NightMICU

답변

14

편집 : 더 항상 작곡가의 최신 버전을 실행하고 있는지 확인 진행하기 전에, 당신은 당신이 composer update을 실행하면 composer self-update

는 것이다 통해 업데이트 할 수 있습니다 각 라이브러리 (또는 최신 릴리스)에 대한 최신 gitref를 계산 한 다음 해당 버전의 라이브러리를 설치합니다. 그런 다음이 버전을 composer.lock 파일에 저장합니다.

composer install을 실행하면 composer.lock 파일에 정의 된 버전 만 설치됩니다.

이유는 composer update이 오래 걸리고 많은 메모리를 사용하기 때문입니다. 모든 라이브러리의 버전을 추적하고 composer.json에 정의한 버전과 비교 한 다음 해당 라이브러리의 모든 종속성을 확인해야하기 때문입니다. 이것은 상당히 집중적 인 과정입니다.

실행중인 작곡가가 hhvm (설치 가능 : here)을 사용하면 composer update 프로세스의 속도가 빨라진다는 것을 알게되었습니다.

부족한 점은 사용량이 많은 메모리를 사용하고 php.ini 파일을 늘려야한다는 것입니다. CLI와 관련된 설명서를 업데이트해야합니다.

편집 : 절대로 composer update을 프로덕션 환경에서 실행하지 마십시오. 개발할 때 종속성을 업데이트 한 다음 composer install을 사용하여 프로덕션 환경에서 마지막으로 사용한 작성자 종속성 세트를 설치해야합니다.

+0

composer.json 파일에 새 패키지를 추가 할 때, 작곡가 업데이트 대신 작곡가 설치를 실행하는 것이 가장 좋습니다? 또한 AWS PHP SDK를 설치하기 전에 어떤 문제도 없었습니다. 시작하려는 원인을 취소 할 방법이 있습니까? 나는 아직도이 모든 작곡가 사업에 매달려있다. – NightMICU

+0

더 많은 의존성을 추가함에 따라'composer update'는 더 오래 걸릴 것입니다 - 더 많은 계산이 필요합니다. 나는 당신의 이슈와 관련이있을 수있는 토론 (https://github.com/composer/composer/issues/2704)을 발견했다. HHVM을 설치하고'composer update'를 실행하는 것이 좋습니다. 대신 – JamesHalsall

+0

좋아, 나는 HHVM을 조사 할 것이다. 귀하의 조언 주셔서 감사합니다 :) – NightMICU

13

현재 Composer에 메모리가 소모되는 버그가 있습니다.

당신이

composer install 

그런 다음 공급 업체

rm -rf vendor/laravel 

내부에 폴더를 삭제하지 않으면

composer update 

이 오류가 발생합니다. 그것은 버그입니다, 그것은 메모리가 부족해서는 안됩니다.

지금 당신은 수행하여 직접 문제를 해결할 수 있습니다 또한

php -d memory_limit=-1 /usr/local/bin/composer update 

, this thread을 확인, 그들은이 문제를 해결하려고합니다.

+3

고마워요! 예,''php -d memory_limit = -1/usr/local/bin/composer update' 만 제가 현재 실행할 수있는 유일한 방법입니다 – NightMICU

2

왜 메모리를 많이 차지하는 이유는 패키지를 처리 ​​할 때 작성기의 동작과 replace 키워드 때문입니다.

  • 자신의 버전과 표준 라이브러리 버전을 교체 : 아이디어는 뒤에 대체

    은 당신이이 일을 할 수 있다고했다. 예 : 'symfony/yaml'에서 예제를 발견하면 그것을 포크하고 버그를 수정 한 다음 "nightmicu/yaml"패키지로 릴리스 할 수 있습니다. 그런 다음 작곡가에게 "nightmicu/yaml"이 "symfony/yaml"을 대체한다고 말할 수 있습니다. 그런 다음 "symfony/yaml"에 의존하는 다른 패키지를 설치하면 "nightmicu/yaml"을 사용하여 만족하게됩니다.

  • 사람들이 단일 구성 요소로 패키지를 출시 할 수있을뿐만 아니라 전체 라이브러리를 제공 할 수 있습니다. 심포니 프레임 워크 패키지는 각 구성 요소 패키지를 대체합니다.

약 1 시간 전에 replace 키워드가 전체적으로 Packagist에서 작동한다는 것이 문제입니다.

즉, 인기있는 라이브러리의 경우 fork되고 이름이 바뀌 었습니다. 설치 가능한 버전이 많습니다. 이것이 엄청난 메모리 사용을 초래하고 처리하는 데 오랜 시간이 걸렸습니다.

최신 버전의 composer.phar를 얻었 으면 'replace'가 이제는 루트 composer.json에 지정된 패키지에서만 작업하므로 다르게 작동하므로 지금은 더 좋을 것입니다. 즉, 패키지를 명시 적으로 사용해야합니다. 귀하의 작곡가 .json은 교체가 가능하거나 대체품으로 작동해야하지만 직접 테스트 할 수는 없습니다.

12

시도해보십시오. 내 문제가 해결되었습니다. 메모리를 업데이트하는 대신 문제를 해결하는 것이 더 좋은 방법입니다.

sudo composer self-update 
+0

저에게 감사드립니다! –

+0

정답입니다. – user1658296

+0

감사합니다. 완벽하게 나를 위해 일했습니다! –

3

쉬운 입력이 명령 :

rm -rf vendor/

rm -rf composer.lock

php composer install --prefer-dist

메모리 부족 기계 또는 다른 메모리 문제

을 위해 일해야
+0

필자는 Composer에 대한 업데이트로 문제가 해결 된 것으로 생각합니다. 이것은 먼 기억이되었습니다 – NightMICU

+0

좋습니다. "composer update"명령은 너무 많은 메모리를 사용합니다. 아마도 비교를하기 때문일 것입니다 ... – insign

1

Easies Windows에서이 문제를 해결하는 t 방법은 다음과 같습니다

고토 : C : \ 경우 ProgramData \ ComposerSetup 빈

편집 작곡가 \.박쥐

변경 그것을 :

@ECHO OFF 
php -d memory_limit=-1 "%~dp0composer.phar" %* 

파일을 저장하고 실행 :

작곡가 인 SelfUpdate