Cannot get migration step to execute

Hello,

Iā€™ve created a migration step for the files_sharing app:

sudo -u www-data ./occ migrations:generate files_sharing 24000
New migration class has been generated to /var/www/nextcloud23-dev/apps/files_sharing/lib/Migration/Version24000Date20220208195521.php

Hereā€™s the class:

<?php

declare(strict_types=1);

namespace OCA\Files_Sharing\Migration;

use Closure;
use OCP\DB\Types;
use OCP\DB\ISchemaWrapper;
use OCP\Migration\IOutput;
use OCP\Migration\SimpleMigrationStep;

class Version24000Date20220208195521 extends SimpleMigrationStep {

        /**
         * @param IOutput $output
         * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper`
         * @param array $options
         * @return null|ISchemaWrapper
         */
        public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper {
                $schema = $schemaClosure();
                $table = $schema->getTable('share');
                $table->addColumn('password_expiration_time', Types::TIME);
                return $schema;
        }

}

Now, when I try to execute it, I got:

sudo -u www-data ./occ migrations:execute files_sharing 24000Date20220208195521

In MigrationService.php line 507:

  Migration step 'OCA\Files_Sharing\Migration\Version24000Date20220208195521' is unknown


migrations:execute <app> <version>

Apparently, the issue is that SimpleContainer->resolve() does not find the class:

        public function resolve($name) {
                $baseMsg = 'Could not resolve ' . $name . '!';
                try {
                        $class = new ReflectionClass($name);
                        if ($class->isInstantiable()) {
                                return $this->buildClass($class);
                        } else {
                                throw new QueryException($baseMsg .
                                        ' Class can not be instantiated');
                        }
                } catch (ReflectionException $e) {
                        throw new QueryException($baseMsg . ' ' . $e->getMessage());
                }
        }

The $class = new ReflectionClass($name) statement throws a ā€˜class does not existā€™ error: Class OCA\Files_Sharing\Migration\Version24000Date20220208195521 does not exist

Does anyone have an idea what Iā€™ve been doing wrong?

Regards,

Cyrille

Ok, Iā€™ve received an answer in the chat.

The problem is that ā€œthe class isnā€™t know to composer so you wonā€™t be able to execute it manuallyā€

The solution is to run ā€œcomposer dump-autoloadā€ from within the appā€™s composer folder.

And, in the long-term, learn more about composer :slight_smile: