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.