Magento 2 Використовуйте Symlink в режимі за замовчуванням або в режимі виробництва для статичних файлів Pub


11

Ситуація: я провожу кілька безкоштовних випробувань Magento 2 і маю обмежений простір у форматі HD на VPS. З цієї причини, щоб скоротити простір HD, я хочу, щоб Magento символізував файли в режимі за замовчуванням або в режимі виробництва. Я помітив, що встановлення Magento 2 за замовчуванням складає приблизно 420 Мб, коли сайт запускається вперше, він становить приблизно 770 Мб, тому 350 Мб копіюються файли.

Я змінив: app / etc / di.xml рядок:

 <item name="default" xsi:type="object">Magento\Framework\App\View\Asset\MaterializationStrategy\Copy</item>

до

 <item name="default" xsi:type="object">Magento\Framework\App\View\Asset\MaterializationStrategy\Symlink</item>

Це працює добре, і сайт належним чином створить посилання навіть у режимі за замовчуванням. Однак проблема полягає в тому, що css не створений або js-translation.json файли, які він повинен створити, але не є:

/pub/static/version1488209436/frontend/Magento/luma/en_US/css/styles-m.css

/pub/static/version1488209436/frontend/Magento/luma/en_US/css/styles-l.css

/pub/static/version1488209436/frontend/Magento/luma/en_US/css/print.css

/pub/static/version1488209436/frontend/Magento/luma/en_US/js-translation.json

Отже, питання полягає в тому, як я змушую Magento також генерувати ці файли, коли в режимі за замовчуванням або в режимі виробництва та за допомогою символьних посилань?


Можливо, ви можете використовувати Gulp або Grunt для для CSS-проблеми: magento.stackexchange.com/questions/162906/… і переглянути різні режими для файлу js-translation.json? gist.github.com/antonmakarenko/7538216
— B00MER

Дякую, я підвищу це значення до +100, якщо хтось зможе дати мені крок за кроком і перевірити, чи працює він.
— Кевін Чавес

всередині папки pub / static є файл .htaccess, який відповідає за перезапис URL-адреси та видалення 'version1488209436' з URL-адреси та надання зручного для користувача URL-адреси. Якщо .htaccess не працює належним чином, тоді виникали лише такі проблеми.
— Тонмей

дякую @Tonmoy, але це взагалі не пов’язано з цим. Проблема полягає в тому, що файли не генеруються, тому що я використовую посилання, а не копіюю в режимі за замовчуванням / виробництвом.
— Кевін Чавес

Оскільки є 4 файли, ви можете створити ці посилання вручну або в .sh-скрипті.
— незрозумілий

Відповіді:


6

app/etc/di.xml: додати новий елемент до stategiesList:

<virtualType name="developerMaterialization" type="Magento\Framework\App\View\Asset\MaterializationStrategy\Factory">
    <arguments>
        <argument name="strategiesList" xsi:type="array">
            <item name="view_preprocessed" xsi:type="object">Magento\Framework\App\View\Asset\MaterializationStrategy\Symlink</item>
            <item name="default" xsi:type="object">Magento\Framework\App\View\Asset\MaterializationStrategy\Symlink</item>
/* ++ */    <item name="asset" xsi:type="object">Magento\Framework\App\View\Asset\MaterializationStrategy\Copy</item>
        </argument>
    </arguments>
</virtualType>

Якщо припустити, що ви перебуваєте в режимі розробника, просто видаліть вміст pub/staticта перейдіть на свою сторінку в браузері - magento відновить статичний вміст.

працював для мене в Magento 2.1.4 (стилі-m.css згенеровано, а інші файли отримали посилання).

вся магія відбувається в vendor/magento/framework/App/View/Asset/MaterializationStrategy/Factory.php:

public function create(Asset\LocalInterface $asset)
{   
    if (empty($this->strategiesList)) {
        $this->strategiesList[] = $this->objectManager->get(self::DEFAULT_STRATEGY);
    }   

    foreach ($this->strategiesList as $strategy) {
        if ($strategy->isSupported($asset)) {
            return $strategy;
        }   
    }   

    throw new \LogicException('No materialization strategy is supported');
}   

Magento просто перебирає stategiesListелементи та використовує першу категорію, яка підтримує актив.

Як змусити його працювати у виробничому режимі?

Відмова: цей хак містить редагування основних файлів. остерігайся.

всі випробувані на magento 2.1.4

  1. видалити номер версії зі статичних файлів у Stores > Configuration > Advanced > Developer > Static Files Settings > No
  2. відредагуйте vendor/magento/framework/App/StaticResource.phpта зробіть launchфункцію таким чином:

    public function launch()
    {   
    // disabling profiling when retrieving static resource
    \Magento\Framework\Profiler::reset();
    $appMode = $this->state->getMode();
    /*if ($appMode == \Magento\Framework\App\State::MODE_PRODUCTION) {
        $this->response->setHttpResponseCode(404);
    } else {*/
        $path = $this->request->get('resource');
        $params = $this->parsePath($path);
        $this->state->setAreaCode($params['area']);
        $this->objectManager->configure($this->configLoader->load($params['area']));
        $file = $params['file'];
        unset($params['file']);
        $asset = $this->assetRepo->createAsset($file, $params);
        $this->response->setFilePath($asset->getSourceFile());
        $this->publisher->publish($asset);
    /*}*/
    return $this->response;
    }   
  3. видаліть вміст pub/staticі відвідайте URL-адресу магазину у веб-переглядачі.


Дякую, що це спрацювало чудово! Просто той рядок у di.xml! Також я ціную ваше пояснення, як це працює. Тепер установка становить 482 Мб замість 770 Мб, що заощадить мені гроші, не потребуючи оновлення мого безкоштовного пробного сервера VPS.
— Кевін Чавес

ви дуже раді, сер, я радий, що це працювало для вас.
— Костянтин Герасимов

не достатньо лише змінити лише StaticResource.php і зберегти оригінальний додаток / etc / di.xml без додавання <item name="asset" xsi:type="object">Magento\Framework\App\View\Asset\MaterializationStrategy\Copy</item> ?
— LucScu

0

Якщо у виробничому режимі немає, Magento 2 намагатиметься створити посилання на деякі статичні ресурси. Ви можете змінити таку поведінку, виконавши наступне.

  1. Відкрийте додаток / etc / di.xml і знайдіть розділ virtualType name = "developerMaterialization". У цьому розділі ви знайдете ім'я елемента = "view_preprosedsed", яке потрібно змінити або видалити. Ви можете змінити його, змінивши вміст з Magento \ Framework \ App \ View \ Asset \ MaterializationStrategy \ Symlink в Magento \ Framework \ App \ Перегляд \ Актив \ МатеріалізаціяСтратегії \ Копіювати

  2. Видаліть файли під паб / static. Не видаляйте .htaccess файл.


1
Я не думаю, що ви зрозуміли моє запитання, я не хочу "копіювати", я хочу "посилання", щоб заощадити місце з обмеженими ресурсами сервера.
— Кевін Чавес
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.