CLI의 MAGE_DIRS 부트 스트랩 매개 변수


10

에서 pub/index.php다음과 같은 코드가 생략 "/ 술집"미디어 및 고정 자산에 대한 설정 변경 URL로 사용된다 :

$params[Bootstrap::INIT_PARAM_FILESYSTEM_DIR_PATHS] = [
    DirectoryList::PUB => [DirectoryList::URL_PATH => ''],
    DirectoryList::MEDIA => [DirectoryList::URL_PATH => 'media'],
    DirectoryList::STATIC_VIEW => [DirectoryList::URL_PATH => 'static'],
    DirectoryList::UPLOAD => [DirectoryList::URL_PATH => 'media/upload'],
];
$bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $params);

불행히도 CLI 스크립트 ( bin/magento)에는 이와 같은 것이 없습니다.

Magento\Setup\Mvc\Bootstrap\InitParamListener다음 코드로 수업 을 찾았습니다 .

$initParams = $application->getServiceManager()->get(self::BOOTSTRAP_PARAM);
$directoryList = $this->createDirectoryList($initParams);

그러나이 Zend Service Manager가 데이터를 검색하는 위치와 데이터에 미치는 영향을 이해할 수 없습니다.

내 구체적인 문제는 인덱서가 전체 URL을 생성 http://magento.local/pub/media/...해야 하고 현재 필요한 URL을 생성 해야한다는 것입니다.http://magento.local/media/...

가상 호스트가 가리키고 pub"pub"이 URL의 일부가 아니어야한다고 CLI에 알리려면 어떻게 해야합니까?

이상적으로는 추가 CLI 매개 변수 나 환경 변수에 의존하지 않고 작동해야합니다.


2
이것은 최근 버그로보고되었습니다 : github.com/magento/magento2/issues/8868
— Scott Buchanan

1
와 같은 인수를 사용하여 이것을 설정할 수 있음을 발견했습니다 --magento-init-params=MAGE_DIRS[media][uri]=media. 이것은 실제로 모든 명령에 대해 작동하지만 (코드를 통해 단계적으로 알 수 있지만) setup:네임 스페이스 외부의 명령 은 옵션이 존재하지 않는다는 오류를 잘못 제공합니다.
— Scott Buchanan

@ScottSB 내가 바랐던 것은 아니지만 여전히 흥미로운 발견입니다. 감사합니다!
— Fabian Schmengler

답변:


6

많은 수고를 겪은 후 환경 변수를 사용하는 솔루션을 찾았습니다. 다음과 같은 환경 변수를 사용하여 매개 변수를 설정할 수 있습니다 ( $APP_ROOT실제 Magento 루트로 대체 ).

env \
    "MAGE_DIRS[base][path]=$APP_ROOT" \
    "MAGE_DIRS[pub][uri]=" \
    "MAGE_DIRS[media][uri]=media" \
    "MAGE_DIRS[static][uri]=static" \
    "MAGE_DIRS[upload][uri]=media/upload" \
    bin/magento indexer:reindex

환경 변수를 사용할 때 MAGE_DIRS정의에 포함 된 초기 기본값을 덮어 쓰기 때문에 위와 같이 기본 경로를 지정해야합니다 . 그러나의 전체 기본 구성과 병합됩니다 \Magento\Framework\App\Filesystem\DirectoryList.

향기를 맡아 주신 건축가의이 답변에 감사드립니다.

Magento의 "var"디렉토리를 Magento 2의 다른 위치로 변경하는 방법?


환경 변수는 어떻게 사용합니까? 이것들이 참조 답변과 같이 VHOST에 추가됩니까?
— harri

@ harri 귀하의 질문을 이해하지 못합니다. 이것은 CLI 명령에 대해 이야기하기 때문에 웹 서버가 관여하지 않기 때문에 가상 호스트는 관련이 없습니다. 환경 변수는 그림과 같이 명령 행에 바로 전달됩니다 ( env형식의 인수 FOO=bar는 끝에 명령의 환경 변수로 설정됩니다 bin/magento).
— Scott Buchanan

아아 cron을 통해 실행되는 메소드 로이 문제가 발생하므로 bin / magento cron : crontab에서 실행 하여이 문제를 해결할 방법이 있는지 확실하지 않습니까?
— harri

그냥 내가이 질문에 대해 무엇을 받아 교체 indexer:reindex와 함께 cron:run(물론 너무 $되는 app_root를 여전히 업데이트). 그런 다음 그 모든 것을 crontab에 놓습니다. crontab이 개행을 좋아하는지 확실하지 않으므로 공백으로 바꿀 수 있습니다 (이 경우 후행 백 슬래시 제거).
— Scott Buchanan

나는 더 나은 솔루션이 여기라고 생각 magento.stackexchange.com/a/174503/41325
— A.Maksymiuk


3

MAGE_DIRSCLI를 통해 설정하는 다른 방법을 찾았습니다.

/vendor/magento/framework/App/Filesystem/DirectoryList.php

에

/lib/internal/Magento/Framework/App/Filesystem/DirectoryList.php 

이제 모든 내부 파일의 기본 디렉토리를 변경할 수 있습니다.


thx 이것은 cli 및 webapp의 캐시 폴더를 변경하는 데 도움이되었습니다 .D
— ZFNerd

실제로 나는 이것이이 문제의 가장 좋은 해결책이라고 믿습니다. 공식 Magento 안내서는 / lib / internal을 사용하여 코어를 사용자 정의 할 것을 권장합니다. devdocs.magento.com/guides/v2.3/architecture/archi_perspectives/…
— A.Maksymiuk

@ A.Maksymiuk 나는 당신이 그 페이지를 오해하고 있다고 생각합니다. 확장 코드 개발자에게는 유용한 코드가있을 수 있지만 여기서 직접 코어를 사용자 정의하는 것은 권장 하지 않습니다 . 페이지의 앞부분에 "Magento를 확장하는 경우 Framework 라이브러리를 호출하는 방법을 알아야하지만 Framework 파일을 수정해서는 안됩니다."
— Scott Buchanan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.