bestsource

심포니 만들기:마이그레이션: 메타데이터 저장소가 최신이 아닙니다. 이 문제를 해결하려면 sync-metadata-storage 명령을 실행하십시오.

bestsource 2023. 8. 12. 10:32
반응형

심포니 만들기:마이그레이션: 메타데이터 저장소가 최신이 아닙니다. 이 문제를 해결하려면 sync-metadata-storage 명령을 실행하십시오.

할 마다 이 합니다.php bin/console make:migration아니 심지어는doctrine:migration status내가 시도할 때doctrine:migration:sync-metadata-storage여전히 같은 오류 메시지가 표시됩니다.

저는 현재 심포니를 배우고 있고 가이드를 따르고 있지만 왠지 심포니 4.4 php 7.2가 문제가 됩니다.

.env의 DATABASE_URL을 에서 변경해 보십시오.

DATABASE_URL=mysql://root:@127.0.0.1:3306/testtest?serverVersion=10.4.11

로.

DATABASE_URL=mysql://root:@127.0.0.1:3306/testtest?serverVersion=mariadb-10.4.11

Symphony 설명서에서는 버전 번호를 지정하되 데이터베이스 유형은 지정하지 않는 것이 좋습니다.

"server_version(MySQL 5.7을 사용하는 경우 5.7 등)을 포함하여 구성할 수 있는 config/session/session.dll의 옵션이 더 많아 독트린의 작동 방식에 영향을 미칠 수 있습니다." https://symfony.com/doc/current/doctrine.html

원답: https://github.com/doctrine/DoctrineMigrationsBundle/issues/337#issuecomment-645390496

MariaDB의 경우 전체 semver 호환 버전이 필요합니다.마이너. 마이너, 패치.를 으로써.mysql --version현재 실행 중인 버전이 정확하게 표시됩니다.

서버 버전 앞에 mariadb-x.x.x를 붙이면 충분했습니다.그것은 문제를 해결했습니다.

"MariaDB 데이터베이스를 실행하는 경우, serverVersion 앞에 mariadb-(예: mariadb-10.2.12)를 붙여야 합니다."

https://www.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html#connecting-using-a-url

변경하면 작동합니다.DATABASE_URL.env

시작:

DATABASE_URL=mysql://root:@127.0.0.1:3306/testtest?serverVersion=10.4.11

받는 사람:

DATABASE_URL=mysql://root:@127.0.0.1:3306/testtest?serverVersion=mariadb-10.4.11

저의 경우, URL에서 ?serverVersion=5.2를 제거하면 작동합니다.

당신은 그것을 바꿔야 합니다.serverVersion=5.7.env에서serverVersion=mariadb-10.4.8

심포니 5.1

다음과 같은 정보가 있는 경우:

잘못된 플랫폼 버전 "maridb-10.4.13"이 지정되었습니다.플랫폼 버전은 "<major_version>" 형식으로 지정해야 합니다.<syslog_version>.<syslog_version>.

둘 중 하나만 하면 됩니다.

구성/설정

doctrine:
  dbal:
    server_version: 'mariadb-10.4.13'

또는 구성 파일 .env에 있습니다.

DATABASE_URL=mysql://databaseUsername:UserPassword@localhost:3306/databaseName?serverVersion=mariadb-10.4.13

독트린 마이그레이션 3으로 업그레이드한 후 동일한 문제가 발생했습니다.

마이그레이션 버전이 저장된 테이블 이름을 포함하여 많은 것이 변경된 것 같습니다 :(

그래서 업데이트를 했습니다.config/packages/doctrine_migrations.yaml대비하여) 것이으로 진행되었습니다. :) 로공운 ( ) 마그을 생하고 만지성 새캐며 시모으 대여웠다 진든니습로 었정으되행 것경적상하비 이를를의우약이션 :)

doctrine_migrations:
migrations_paths:
    # namespace is arbitrary but should be different from App\Migrations
    # as migrations classes should NOT be autoloaded
    'DoctrineMigrations': '%kernel.project_dir%/src/Migrations'
storage:
    # Default (SQL table) metadata storage configuration
    table_storage:
        table_name: 'migration_versions'
        version_column_name: 'version'
        version_column_length: 1024
        executed_at_column_name: 'executed_at'
        execution_time_column_name: 'execution_time'

BTW. 문서가 최신 버전입니다. ;) https://symfony.com/doc/master/bundles/DoctrineMigrationsBundle/index.html

추가했습니다.serverVersion=mariadb-10.4.11데이터베이스 URL 문자열에서 작동했습니다.

.env 파일에서 "?serverVersion=5.7"을 제거했을 때 함께 작동했습니다.

원본: DATABASE_URL="mysql://root:@127.0.0.1:3306/center?serverVersion=5.7"

DATABASE_URL="mysql://root:@127.0.0.1:3306/center"로 이동합니다.

바꾸다

DATABASE_URL=mysql://root:@127.0.0.1:3306/testtest?serverVersion=10.4.11

로.

DATABASE_URL=mysql://root:@127.0.0.1:3306/testtest?serverVersion=mariadb-10.4.11

file.env 버전을 합니다.DATABASE_URL=mysql://root:@127.0.0.1:3306/DB_Name

저는 새로운 버전의 독트린 마이그레이션 3.0 때문에 같은 문제를 가지고 있습니다.

php bin/console  debug:config DoctrineMigrationsBundle 

https://symfony.com/doc/master/bundles/DoctrineMigrationsBundle/index.html

/vendor/docrine/dbal/lib/Docrine/DB 파일을 수정하여 이 문제를 임시로 해결했습니다.AL/Schema/Comparator.php

변경된 메서드 diffColumn:

    // This is a very nasty hack to make comparator work with the legacy json_array type, which should be killed in v3
    if ($this->isALegacyJsonComparison($properties1['type'], $properties2['type'])) {
        array_shift($changedProperties);

        $changedProperties[] = 'comment';
    }

    //////////////////////////////////////////////////////////////////
    // This is my change for fix problem//////////////////////////////
    //////////////////////////////////////////////////////////////////
    if ($properties1['default'] === 'NULL') {
        $properties1['default'] = null;
    }
    if ($properties2['default'] === 'NULL') {
        $properties2['default'] = null;
    }
    /////////////////////////////////////////////////////////////////


    // Null values need to be checked additionally as they tell whether to create or drop a default value.
    // null != 0, null != false, null != '' etc. This affects platform's table alteration SQL generation.
    if (($properties1['default'] === null) !== ($properties2['default'] === null)
        || $properties1['default'] != $properties2['default']) {
        $changedProperties[] = 'default';
    }

https://symfony.com/doc/master/bundles/DoctrineMigrationsBundle/index.html

문자 그대로의 지시에 따르다

작곡가는 교리/이론-이행-이론이 필요합니다.

php bin/migration 독트린:이행:생성

php bin/migrations 독트린: 마이그레이션: 상태 --show-migrations

php bin/migration 독트린: 마이그레이션: 삭제

모든 것이 나에게 효과가 있었습니다.

donctrine/docrine-migrations-bundle을 버전 3으로 업그레이드한 경우, 이 솔루션은 다음과 같은 이점을 제공합니다.

그냥 실행: php bin/console 독트린: 마이그레이션: sync-metadata-storage

여기서도 같은 문제가..저는 그것을 "좋아"했지만 집에서 이것을 시도하지 마세요!

는 을제니다습거했에서 이 을 삭제했습니다.vendor\doctrine\migrations\lib\Doctrine\Migrations\Metadata\Storage\TableMetadataStorage.php하세요.

$expectedTable = $this->getExpectedTable();

if ($this->needsUpdate($expectedTable) !== null) {
    throw MetadataStorageError::notUpToDate();
}

다음 그럼실을 실행합니다.make:migration그리고.migrations:migrate마이그레이션이 성공하면 해당 기능을 다시 붙여넣습니다.

.env 파일에서 기본 설정 패턴을 사용할 수 있습니다.

DATABASE_URL=mysql://db-username:db-password@127.0.0.1/db-name

그러나 trinction에서 server_version을 구성해야 합니다.

구성 예는 다음과 같습니다.

doctrine:
    dbal:
        driver: 'pdo_mysql'
        server_version: 'mariadb-10.5.8-focal'
        charset: UTF8
        url: '%env(resolve:DATABASE_URL)%'

제 경우에는 mariadb-10.5.8-focial입니다.

데이터베이스 줄의 .env 파일에서 데이터베이스 이름 뒤에 있는 모든 항목을 제거합니다.이것이 문제를 해결할 것입니다!

저는 이 모든 해결책을 시도했습니다.Symfony 6.x 버전에서는 이러한 솔루션이 모두 작동하지 않습니다.하지만 난 제거했어요symfony/web-profiler-bundle패키지와 모든 것이 지금은 괜찮습니다.사실 프로파일러는 필요 없어요감사합니다, 심포니.저는 당신이 앞으로 저의 다른 날들을 보내길 바랍니다.

조만간 심포니 프레임워크 때문에 PHP에서 탈출할 것입니다.

이 명령을 실행하십시오.

symphony 콘솔 캐시: 지우기

그것은 나를 위해 문제를 해결합니다.

내 (MariaDB 10.7.3) 설?serverVersion=mariadb-10.7.3도움이 되지 않았습니다.

대신 MariaDB 10.7.3을 제거하고 MySQL Community 8.0.28을 설치한 다음 DATABASE_URL을?serverVersion=8.0.28

MariaDB에서 MySQL Community로 전환한 후에야 이 문제를 해결할 수 있었습니다.

언급URL : https://stackoverflow.com/questions/62412312/symfony-makemigration-the-metadata-storage-is-not-up-to-date-please-run-the

반응형