Magento2 - Đang tải các mô-đun khác nhau cho mỗi môi trường


7

Hiện tại có cách nào để tải các mô-đun khác nhau cho mỗi môi trường không, chỉ tải phần mở rộng CommerceBug của Alan khi tôi ở trong môi trường phát triển của mình?

Giống như trong Magento 1 Tôi có thể .gitignore các tệp mô-đun trong ứng dụng / mã nhưng tôi không thể bỏ qua các thay đổi đối với app / etc / config.php một cách dễ dàng thông qua git.

Dường như không thể tải các mô-đun được xác định trong env.php của bạn vì phương thức tải Magento \ Framework \ App \ DeploymentConfig \ Reader chỉ sử dụng mảng_merge, thay vì một số loại hợp nhất sâu, để hợp nhất dữ liệu tệp và ném Ngoại lệ nếu tương tự chìa khóa được tìm thấy.

/**
 * Loads the configuration file
 *
 * @param string $fileKey
 * @return array
 * @throws \Exception
 */
public function load($fileKey = null)
{
    $path = $this->dirList->getPath(DirectoryList::CONFIG);
    $fileDriver = $this->driverPool->getDriver(DriverPool::FILE);
    $result = [];
    if ($fileKey) {
        $filePath = $path . '/' . $this->configFilePool->getPath($fileKey);
        if ($fileDriver->isExists($filePath)) {
            $result = include $filePath;
        }
    } else {
        $configFiles = $this->configFilePool->getPaths();
        $allFilesData = [];
        $result = [];
        foreach (array_keys($configFiles) as $fileKey) {
            $configFile = $path . '/' . $this->configFilePool->getPath($fileKey);
            if ($fileDriver->isExists($configFile)) {
                $fileData = include $configFile;
            } else {
                continue;
            }
            $allFilesData[$configFile] = $fileData;
            if (!empty($fileData)) {
                $intersection = array_intersect_key($result, $fileData);
                if (!empty($intersection)) {
                    $displayMessage = $this->findFilesWithKeys(array_keys($intersection), $allFilesData);
                    throw new \Exception(
                        "Key collision! The following keys occur in multiple config files:"
                        . PHP_EOL . $displayMessage
                    );
                }
                $result = array_merge($result, $fileData);
            }
        }
    }
    return $result ?: [];
}

Tôi đã tìm thấy một vấn đề github rất sớm được nêu ra bởi @mzeis trên https://github.com/magento/magento2/issues/7 nói về nhiều cấu hình cho mỗi môi trường nhưng điều này đã bị đóng.

Có thể thực hiện một số hook git gọi mô-đun bin / magento: enable và module: vô hiệu hóa nhưng đây có vẻ là một cách rất vòng để đạt được cấu hình phụ thuộc môi trường thực sự.

Câu trả lời:


0

Tôi sẽ trả lời điều này dựa trên cả hai cách cài đặt mô-đun trong Magento. Tuy nhiên, trong cả hai trường hợp, bạn nên gitignore tệp app / etc / config.php và tạo nó trên mỗi môi trường.

Được cài đặt bằng Trình soạn thảo

Bạn nên cài đặt mô-đun trong phần yêu cầu của nhà soạn nhạc trái ngược với phần yêu cầu (bạn thực hiện việc này bằng cách sử dụng composer require --dev module/name). Sau đó, trong môi trường sản xuất của bạn khi bạn chạy, composer installbạn nên bao gồm --no-devtham số.

Được cài đặt bằng cách triển khai lên ứng dụng / mã / Mô-đun / Tên

Bạn sẽ xử lý phương pháp này giống như trong M1. Chỉ cần gitignore thư mục.


Khi bạn nói "đã tạo nó trên mỗi môi trường", bạn sẽ làm thế nào khi "triển khai ứng dụng / mã / Mô-đun / Tên" có một lệnh để làm điều này?
Martijn Schot

app / etc / config.php được tạo tự động / cập nhật khi bạn chạy php bin/magento setup:upgradehoặc php bin/magento module:enable <modulename>. Nếu mô-đun không tồn tại (bạn đã xác nhận nó) thì nó sẽ không được thêm vào config.php (hoặc nó sẽ bị xóa nếu nó tồn tại trước đó)
Joe Constant

Sau khi thử một số thứ khác nhau, tệp cần tồn tại và cần tối thiểu tối thiểu một mục trong mảng mô-đun để tạo chính xác, nếu không, nó sẽ ném ngoại lệ
Martijn Schot

Có vẻ như một cái gì đó đã thay đổi kể từ khi tôi ban đầu làm điều này. Tuy nhiên, tôi vẫn khuyên bạn không nên theo dõi tệp config.php trong git. Bạn sẽ chỉ gặp sự cố khi chạy môi trường đầu tiên và sau đó chỉ khi bạn đang cố gắng sử dụng env.php hiện có cùng với DB hiện có. Nếu bạn đang làm điều đó, bạn cũng nên sử dụng config.php.
Joe Constant

1

Nếu bạn đang sử dụng trình soạn thảo để cài đặt một mô-đun, thì cách duy nhất để không vô hiệu hóa nó là sử dụng mô-đun php bin / magento: vô hiệu hóa Vendor_Module ở đâu đó trong quá trình triển khai của bạn.

Nếu bạn không sử dụng trình soạn thảo và mô-đun nằm trong ứng dụng / mã / Nhà cung cấp / Mô-đun thì bạn nên bỏ qua nó trong vcs của mình. Điều này không có nghĩa là bạn phải giữ một bản sao của mô-đun đó ở nơi nào khác ngoài vcs của bạn.

Tùy chọn thứ hai có vẻ là tốt nhất. Nếu bạn không muốn mô-đun đó hiện diện hoặc hoạt động trên môi trường sản xuất của mình thì nó có thể được xem như là một công cụ phát triển và không nên là một phần của dự án của bạn trong vcs.

Tôi cũng khuyên bạn nên bỏ qua loại mô-đun này trong tệp bỏ qua toàn cầu của bạn thay vì trên cơ sở từng dự án. Điều này ngăn ngừa trượt chân.

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.