Gibt es derzeit eine Möglichkeit, verschiedene Module pro Umgebung zu laden, z. B. die CommerceBug-Erweiterung von Alan nur zu laden, wenn ich mich in meiner Entwicklungsumgebung befinde?
Wie in Magento 1 kann ich die Moduldateien in app / code .gitignore, aber ich kann Änderungen an app / etc / config.php nicht einfach über git ignorieren.
Es scheint nicht möglich zu sein, Module zu laden, die in Ihrer env.php als Magento \ Framework \ App \ DeploymentConfig \ Reader definiert sind. Die Lademethode verwendet nur array_merge anstelle einer tiefen Zusammenführung, um die Dateidaten zusammenzuführen, und löst eine Ausnahme aus, wenn dies ähnlich ist Schlüssel gefunden.
/**
* 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 ?: [];
}
Ich habe ein sehr frühes Github-Problem gefunden, das von @mzeis unter https://github.com/magento/magento2/issues/7 angesprochen wurde und das sich mit mehreren Konfigurationen pro Umgebung befasst, das jedoch geschlossen wurde.
Es wäre möglich, einige Git-Hooks durchzuführen, die bin / magento module: enable und module: disable aufrufen, aber dies scheint ein sehr umständlicher Weg zu sein, um eine wirklich umgebungsabhängige Konfiguration zu erreichen.
php bin/magento setup:upgrade
oder ausführenphp bin/magento module:enable <modulename>
. Wenn das Modul nicht existiert (Sie haben es gitigniert), wird es nicht zu config.php hinzugefügt (oder es wird entfernt, wenn es zuvor existiert hat)Wenn Sie Composer zum Installieren eines Moduls verwenden, können Sie es nur mithilfe des PHP-Bin / Magento-Moduls deaktivieren: Deaktivieren Sie Vendor_Module irgendwo in Ihrem Bereitstellungsprozess.
Wenn Sie Composer nicht verwenden und sich das Modul unter App / Code / Vendor / Module befindet, sollten Sie es in Ihrem VCS ignorieren. Dies bedeutet, dass Sie eine Kopie dieses Moduls an einem anderen Ort als in Ihrem VCS aufbewahren müssen.
Die zweite Option scheint die beste zu sein. Wenn Sie nicht möchten, dass dieses Modul in Ihrer Produktionsumgebung vorhanden oder aktiv ist, kann es als Entwicklungstool angesehen werden und sollte nicht Teil Ihres Projekts in vcs sein.
Ich würde auch empfehlen, diese Art von Modul in Ihrer globalen Ignorierdatei zu ignorieren und nicht pro Projekt. Dies verhindert Ausrutscher.
quelle