Magento 2 Sử dụng Symlink ở chế độ mặc định hoặc chế độ cho các tệp tĩnh Pub


11

Tình huống: Tôi đang chạy một số bản dùng thử miễn phí của Magento 2 và có không gian HD hạn chế trên VPS. Vì lý do này để cắt giảm không gian HD, tôi muốn có Magento symlink các tệp ở chế độ mặc định hoặc chế độ sản xuất. Tôi đã nhận thấy rằng cài đặt Magento 2 mặc định là khoảng 420mb sau khi trang web chạy lần đầu tiên vào khoảng 770mb, vì vậy 350mb trong số này là các tệp được sao chép.

Tôi đã sửa đổi: dòng app / etc / di.xml:

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

đến

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

Điều này hoạt động tốt và trang web sẽ tạo đúng các liên kết ngay cả khi ở chế độ mặc định. Tuy nhiên, vấn đề là css không được tạo hoặc js-dịch.json các tệp cần tạo nhưng không phải là:

/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

Vì vậy, câu hỏi là: làm thế nào để tôi tạo Magento cũng tạo các tệp này khi ở chế độ mặc định hoặc sản xuất và sử dụng symlink?


Có lẽ bạn có thể sử dụng Gulp hoặc Grunt cho vấn đề CSS: magento.stackexchange.com/questions/162906/ và xem xét các chế độ khác nhau cho tệp js- dịch.json ? gist.github.com/antonmakarenko/7538216
B00mer

Cảm ơn, tôi sẽ tăng lên 100 điểm nếu ai đó có thể cho tôi từng bước và xác minh nó hoạt động.
Kevin Chavez

bên trong thư mục pub / static có tệp .htaccess, có trách nhiệm viết lại url và xóa 'version1488209436' khỏi url và cung cấp url thân thiện với người dùng. Nếu .htaccess không hoạt động đúng thì chỉ có loại sự cố này xảy ra.
Tonmoy

cảm ơn bạn @Tonmoy nhưng nó hoàn toàn không liên quan đến điều này. Vấn đề là các tệp không tạo vì tôi đang sử dụng liên kết tượng trưng thay vì sao chép trong khi ở chế độ mặc định / sản xuất.
Kevin Chavez

Vì có 4 tệp hơn bạn có thể tạo các liên kết tượng trưng đó theo cách thủ công hoặc trong tập lệnh .sh.
che khuất

Câu trả lời:


5

app/etc/di.xml: thêm mục mới vào 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>

Giả sử bạn đang ở chế độ nhà phát triển, chỉ cần xóa nội dung của pub/static và truy cập trang của bạn trong trình duyệt - magento sẽ tạo lại nội dung tĩnh.

làm việc cho tôi trong Magento 2.1.4 (style-m.css đã được tạo và các tệp khác được liên kết với nhau).

tất cả các phép thuật xảy ra trong 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 chỉ vòng qua stategiesListcác vật phẩm và sử dụng chiến lược đầu tiên hỗ trợ tài sản.

Làm thế nào để làm cho nó hoạt động trong chế độ sản xuất?

Tuyên bố từ chối trách nhiệm: hack này chứa chỉnh sửa tập tin cốt lõi. coi chừng

tất cả đã được thử nghiệm trên magento 2.1.4

  1. xóa số phiên bản khỏi tệp tĩnh trong Stores > Configuration > Advanced > Developer > Static Files Settings > No
  2. chỉnh sửa vendor/magento/framework/App/StaticResource.phpvà làm cho launchchức năng trông như thế này:

    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. xóa nội dung pub/staticvà truy cập url cửa hàng của bạn trong trình duyệt.


Cảm ơn bạn điều này đã làm việc hoàn hảo! Chỉ cần một dòng trong di.xml! Ngoài ra tôi đánh giá cao lời giải thích của bạn về cách nó hoạt động. Bây giờ cài đặt là 482mb thay vì 770mb sẽ giúp tôi tiết kiệm tiền khi không phải nâng cấp máy chủ dùng thử miễn phí VPS.
Kevin Chavez

bạn rất hoan nghênh ngài tôi rất vui vì nó đã làm việc cho bạn
Konstantin Gerasimov

nó không chỉ đủ sửa đổi chỉ StaticResource.php và giữ ứng dụng gốc / etc / di.xml mà không cần thêm <item name="asset" xsi:type="object">Magento\Framework\App\View\Asset\MaterializationStrategy\Copy</item> ?
LucScu

0

Khi không ở chế độ sản xuất, Magento 2 sẽ cố gắng tạo liên kết tượng trưng cho một số tài nguyên tĩnh. Bạn có thể thay đổi hành vi đó bằng cách làm như sau.

  1. Mở ứng dụng / etc / di.xml và tìm phần virtualType name = "developerM vật chất hóa". Trong phần đó, bạn sẽ tìm thấy một tên mục = "view_prepered" cần được sửa đổi hoặc xóa. Bạn có thể sửa đổi nội dung đó bằng cách thay đổi nội dung từ Magento \ Framework \ App \ View \ Asset \ MaterializationStrargety \ Symlink thành Magento \ Framework \ App \ View \ Asset \ MaterializationStrargety \ Copy

  2. Xóa các tập tin dưới pub / static. Vui lòng không xóa tệp .htaccess.


1
Tôi không nghĩ bạn hiểu câu hỏi của tôi, tôi không muốn "sao chép" Tôi muốn "liên kết tượng trưng" để tiết kiệm dung lượng với tài nguyên máy chủ hạn chế.
Kevin Chavez
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.