Параметри завантаження MAGE_DIRS в CLI


11

У pub/index.phpнаведеному нижче коді використовується для встановлення URL-адрес зміни для медіа та статичних активів, щоб опустити "/ pub":

$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 витягує дані і як на них можна впливати.

Моя конкретна проблема полягає в тому, що індексатор повинен генерувати повні URL-адреси і в даний час робить це так http://magento.local/pub/media/..., де мені це потрібноhttp://magento.local/media/...

Як я можу сказати CLI, що мій віртуальний хост вказує на pub"pub" і не повинен бути частиною URL-адрес?

В ідеалі це повинно працювати, не покладаючись на додаткові параметри CLI або змінні середовища.


2
Про це нещодавно повідомлялося про помилку: github.com/magento/magento2/isissue/8868
Скотт

1
Я виявив, що ви можете встановити це за допомогою такого аргументу --magento-init-params=MAGE_DIRS[media][uri]=media. Це насправді працює для всіх команд (очевидно, перейшовши через код), але команди поза setup:простором імен неправильно дають помилку, що параметр не існує.
Скотт Бьюкенан

@ScottSB Не зовсім те, на що я сподівався, але все-таки цікава знахідка, дякую за це!
Фабіан Шменглер

Відповіді:


7

Після багато клопоту я знайшов рішення, використовуючи змінні середовища, які, я знаю, не те, що ви хотіли. Ви можете встановити параметри, використовуючи такі змінні середовища (замінюючи $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.

Похвальна відповідь самого головного архітектора за те, що він поставив мене на аромат:

Як змінити каталог "var" Magento на інше місце в Magento 2?


Як ви використовуєте змінні середовища? Це додавання до VHOST, як відповідь, що посилається?
harri

@harri Я не розумію твого питання. Оскільки мова йде про команду CLI, vhost не має значення, оскільки веб-сервер не задіяний. Змінні середовища передаються прямо в командному рядку, як показано ( в цьому випадку аргументи envу форматі FOO=barвстановлюються як змінні середовища для команди в кінці bin/magento).
Скотт Бюкенан

Ах, за те, що я отримую цю проблему методом запуску через cron, тому не впевнений, чи є спосіб виправити це за допомогою мого bin / magento cron: запустити в crontab?
harri

Просто візьміть те, що я маю у відповіді, і замініть indexer:reindexна cron:run(і досі, звичайно, також оновлюйте $ APP_ROOT). Потім киньте всю цю річ у кронтаб. Не впевнений, чи сподобаються новим рядкам crontab, тож ви можете просто замінити їх пробілами (видаляючи в цьому випадку зворотні косої риски).
Скотт Бюкенан

Я думаю, що краще рішення тут magento.stackexchange.com/a/174503/41325
A.Maksymiuk


2

Я знайшов інший спосіб встановити MAGE_DIRSчерез CLI, просто скопіюйте

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

до

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

Тепер ви можете змінити каталог за замовчуванням для всіх внутрішніх файлів.


THX це допомогло мені змінити папку кешу для cli та
webapp

Власне, я вірю, що це найкраще рішення цієї проблеми. Офіційний посібник Magento рекомендує використовувати / lib / Internal для налаштування ядра. devdocs.magento.com/guides/v2.3/architecture/archi_perspectives/…
A.Maksymiuk

1
@ A.Maksymiuk Я вважаю, що ви неправильно розумієте цю сторінку. Відзначається, що код там може бути корисним розробникам розширень, але він не рекомендує налаштовувати ядро ​​безпосередньо там. Раніше на сторінці написано: "Ніколи не слід змінювати файли Framework, хоча якщо ви розширюєте Magento, ви повинні знати, як викликати бібліотеки Framework".
Скотт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.