Как запустить миграцию для определенной среды в laravel - программирование
Подтвердить что ты не робот

Как запустить миграцию для определенной среды в laravel

Я создаю новое приложение с laravel (Laravel 4) и имею некоторые проблемы с настройкой базы данных через миграции.

Я сделал файл миграции с помощью:

artisan migrate:make --table="jobs" --create jobs

Создав файл в базе данных/миграции, как и ожидалось, я сделал несколько модов и пошел, чтобы запустить его, используя

artisan migrate --env=local

Но я получаю ответ "Nothing to migrate"

Если я попробую запустить без --env=local, он использует database.php в папке config (не в локальной/промежуточной/производственной папке), которую мы не хотим использовать, так как это не будет специфично для среды.

Моя первая мысль была в порядке, возможно, мне нужно поставить флаг env на вызов migrate:make, поэтому я попробовал это, но получил сообщение об ошибке, говоря, что он не может создать файл миграции. Тогда я подумал, что в любом случае не имеет смысла делать env-ориентированные миграции... они должны быть созданы родовыми и просто запускаться на основе env, поэтому в конце все среды используют одни и те же сценарии миграции.

Итак, я немного застрял здесь, куда идти отсюда

4b9b3361

Ответ 1

Вам нужно указать среду перед командой migrate.

artisan --env=local migrate

Запуск artisan help показывает формат, в котором должны следовать команды.

artisan help

Usage:
  [options] command [arguments]

Ответ 2

Решенный.

Решение было просто отредактировать файл local/database.php(или production/database.php и т.д.), убедившись, что переменная пути миграции указывает на местоположение, которое migrate:make создает файлы миграции, просто измените

'application' => __DIR__.'/../database/migrations',

к

'application' => DIR.'/../../database/migrations',

Ответ 3

Если вы измените перенос после его запуска, сначала вам нужно отменить миграцию.

php artisan migrate:rollback

Продолжайте работать до тех пор, пока измененная миграция не будет отменена. Кроме того, вы можете reset использовать всю схему с помощью

php artisan migrate:reset

Но вам нужно будет вызвать ваши миграции, как обычно, чтобы обновить их.

php artisan migrate

Наконец, вы можете reset, а затем выполнить миграцию, вызвав

php artisan rebuild

Также обратите внимание, что, как правило, неправильная практика заключается в том, чтобы модифицировать ваши миграции после их создания, если только вы это не сделали. После его развертывания вы не должны изменять его и вместо этого создавать новый файл миграции.

Надеюсь, что это поможет.

Изменить: я как-то пропустил индикатор Laravel 4. Большинство из этих команд все еще работают, я верю, но вам, возможно, придется настроить.

Ответ 4

Я выяснил решение для запуска migrate для разных баз данных. В принципе, команда artisan migrate --env=local не работает. Но мы можем определить новую строку соединения в config\database.php. Например:

<?php
   'mysql_testing' => [
        'driver'    => 'mysql',
        'host'      => env('DB_TESTING_HOST'),
        'database'  => env('DB_TESTING_DATABASE'),
        'username'  => env('DB_TESTING_USERNAME'),
        'password'  => env('DB_TESTING_PASSWORD'),
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => 'prefix_',
    ],

И укажите --database, когда мы запустим artisan migrate следующим образом:

php artisan migrate --database=mysql_testing

Надеюсь, что это поможет:)