Skip to content

DirectoryIterator + docker + windows + wsl2 #174

Description

@arinamirosha

Для локальной разработки развернула проект в докере на windows, используя официальный репозиторий https://github.com/bitrix-tools/env-docker. Столкнулась с тем, что модуль миграций не видит все миграции в папке /local/php_interface/migrations, большая часть миграций "теряется". Проблема оказалась в DirectoryIterator в VersionManager::getFiles(). Описание проблемы из Интернета:

https://bugs.php.net/bug.php?id=81669
docker/for-win#12405

Пришлось лезть в код модуля и менять скан папки через scandir(), чтобы считывались все миграции. DirectoryIterator был всегда и никому не доставлял проблем, но я столкнулась с этим. Случай частный, поэтому вам решать, стоит ли тут что-то менять и не возникнет ли от этого потенциальных проблем. У меня работает так:

    public function getFiles(): array
    {
        $dir = $this->getVersionConfig()->getVal('migration_dir');
        $files = [];

        $items = scandir($dir);
        if ($items === false) {
            return $files;
        }

        foreach ($items as $name) {
            $path = $dir . DIRECTORY_SEPARATOR . $name;

            if (!is_file($path)) {
                continue;
            }

            if (pathinfo($name, PATHINFO_EXTENSION) !== 'php') {
                continue;
            }

            $filename  = pathinfo($name, PATHINFO_FILENAME);
            $timestamp = $this->getVersionTimestamp($filename);

            if (!$timestamp) {
                continue;
            }

            $files[$filename] = [
                'version'  => $filename,
                'location' => $path,
                'ts'       => $timestamp,
            ];
        }

        return $files;
    }

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions