The migration directory does not exist

Обновил фреймворк из транка с целью поиграться с миграциями. Создал новый проект. Делаю yiic migrate create some_migration - получаю:


Error: The migration directory does not exist: application.migrations

Создал папку protected/migrations - ничего не изменилось. От чего он ее не видет то?

Возможно вы указали migrationPath??

Дело в том что application.migrations присваивается только если migrationPath===null.

Да нет, ничего не указано. Указание в config.php или console.php тоже ничего не дало.


yiic migrate create some_migration

Что это?)

Мб надо:


yiic migrate create --name=some_migration

дело не в аргументе а в папке этой

Права на запись есть?

samdark

Не думаю что в этом ошибка…


if(!is_dir($this->migrationPath))

			die('Error: The migration directory does not exist: '.$this->migrationPath);

Идёт проверка существования application.migrations, а не application/migrations, то что не работает Yii::getPathOfAlias я сомневаюсь, а значит на момент инициализации migrationPath уже не равняется Null.

Советую не копать, а в MigrateCommand.php

После:


if($this->migrationPath===null)

			$this->migrationPath=Yii::getPathOfAlias('application.migrations');

Вставить:


else this->migrationPath=Yii::getPathOfAlias(this->migrationPat);

Глянул в beforeAction у MigrateCommand.php




	public function beforeAction($action,$params)

	{

		$path=Yii::getPathOfAlias($this->migrationPath);

		if($path===false || !is_dir($path))

			die('Error: The migration directory does not exist: '.$this->migrationPath);

		$this->migrationPath=$path;


		$yiiVersion=Yii::getVersion();

		echo "\nYii Migration Tool v1.0 (based on Yii v{$yiiVersion})\n\n";


		return true;

	}



попробовал сделать


echo $path;

  • получил /Users/Tipugin/code/php/yiiframework/cli/migrations. хотя ведь должен быть путь до проекта.

/Users/Tipugin/code/php/yiiframework/cli/migrations

Конечно) Ведь ты запускаешь из папки yiiframework, а откуда ему знать путь к приложению

Если интересует как исправить, у тебя в папке protected должен быть файл yiic.bat, запускай через него… Если нет, то Создаёшь его с таким содержанием:


@echo off

@setlocal

set BIN_PATH=%~dp0

if "%PHP_COMMAND%" == "" set PHP_COMMAND=php.exe

%PHP_COMMAND% "%BIN_PATH%yiic.php" %*

@endlocal

Далее в этой же папке файл yiic.php, в него вписываешь:


<?php

$yiic='Путь к фреймворку'/yiic.php';

$config=dirname(__FILE__).'/config/main.php';


require_once($yiic);

Ставишь ‘Путь к фреймворку’ на свой, если конфиг называется не main а иначе, меняешь. Запускаешь отсюда.

ага, protected/yiic работает, миграции создаются. но как то это не привычно. хочется, чтобы создавалось они также как и модели/контроллеры. может вынести миграции в yiic shell?

В shell точно переносить не будем — это создаст проблемы для тех, кто хочет автоматизировать применение миграций.

А из папки фреймворка понятное дело не работает. Надо ведь знать, в каком контексте запускать эти самые миграции.

Тоесть и в релизе будет такой же способ с обращением к protected/yiic?

samdark, Странно что вы разработчик, и спросили про права)

Да. Это обычный способ работы с консолью приложения. yiic из папки фреймворка используется исключительно при генерации каркаса приложения.

Lion__, что тут странного? Именно этот код писал Qiang, а не я. Я исследовал уже существующие решения и реализовал прототип, опираясь на который был написан финальный код.

Ага, теперь все понял. Просто почему-то привык все делать, вызывая yiic из папка с фреймворком. Буду переучиваться.