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.