¿Cómo ejecuto migraciones para un entorno específico en laravel?

4 minutos de lectura

avatar de usuario
duelo

Estoy configurando una nueva aplicación con laravel (Laravel 4) y tengo algunos problemas para configurar la base de datos mediante migraciones.

Hice un archivo de migración con:

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

Lo cual creó un archivo en la base de datos/migraciones como se esperaba, hice algunas modificaciones a esto y fui a encenderlo usando

artisan migrate --env=local

Pero estoy recibiendo la respuesta de "Nothing to migrate"

Si intento correr sin --env=localusa la base de datos.php en la carpeta de configuración (no en la carpeta local/de puesta en escena/de producción) que no queremos usar, ya que no será específico del entorno.

Lo primero que pensé fue OK, tal vez necesito poner el indicador env en el migrate:make llamada, así que lo intenté, pero recibí un error que decía que no podía crear el archivo de migración. Luego pensé que no tenía sentido hacer migraciones basadas en env de todos modos … deberían crearse de forma genérica y simplemente ejecutarse por env, por lo que al final, todos los entornos usan los mismos scripts de migración.

Así que estoy un poco atascado ahora sobre adónde ir desde aquí

avatar de usuario
jason lewis

Debe especificar el entorno antes del comando de migración.

artisan --env=local migrate

Correr artisan help le muestra el formato en el que deben seguir los comandos.

artisan help

Usage:
  [options] command [arguments]

  • lamentablemente, esto no tuvo ningún efecto… todavía obteniendo el Nothing to migrate mensaje

    – duelo

    21 de noviembre de 2012 a las 11:07

  • Bueno, según la ayuda, así es como especificas las opciones. Echa un vistazo a artisan help y verás que está en el formato de [options] command [arguments]. Mi consejo ahora es asegurarse de que todos sus entornos estén configurados correctamente. Lo acabo de comprobar y me funciona bien. Así que te estás perdiendo algo más.

    –Jason Lewis

    21 de noviembre de 2012 a las 11:36

  • Desafortunadamente, esto es totalmente incorrecto (al menos para las versiones de Laravel con las que estoy familiarizado, como 5.2+). Es posible que incluso haya llamado al archivo de ayuda incorrecto. php artisan help migrate dice “Uso: migrate [options]” y da ejemplos de opciones como --database[=DATABASE] y --env[=ENV].

    – Ryan

    31 de agosto de 2019 a las 13:15


  • Debe agregar opciones después del comando artesanal. Por ejemplo, quiero eliminar la base de datos y comenzar la migración desde el principio en mi entorno de prueba: php artisan migrate:fresh --env=testing. Probado en Laravel 5.5.

    – ibnɘꟻ

    6 de julio de 2020 a las 5:04

Encontré una solución para ejecutar migrate para diferentes bases de datos. Básicamente, el comando artisan migrate --env=local no funciona Pero podemos definir una nueva cadena de conexión en config\database.php. Por ejemplo:

<?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_',
    ],

Y especificar el --database cuando corremos artisan migrate como esto:

php artisan migrate --database=mysql_testing

Espero que esto ayude 🙂

Resuelto.

La solución fue simplemente editar local/database.php (o production/database.php, etc.), asegurándose de que la variable de ruta de migración apunte a la ubicación que migrate:make está creando los archivos de migración, simplemente cambie

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

a

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

Si modifica una migración después de ejecutarla, primero debe revertir la migración.

php artisan migrate:rollback

Continúe ejecutándolo hasta que se revierta la migración que ha cambiado. Alternativamente, puede restablecer todo su esquema con

php artisan migrate:reset

Pero luego deberá llamar a sus migraciones como de costumbre para actualizarlas.

php artisan migrate

Finalmente, puede restablecer y luego migrar llamando

php artisan rebuild

También tenga en cuenta que generalmente es una mala práctica modificar sus migraciones después de que se hayan realizado, a menos que literalmente las haya hecho. Una vez implementado, no debe modificarlo y, en su lugar, crear un nuevo archivo de migración.

Espero que esto ayude.

Editar: de alguna manera me perdí el indicador Laravel 4. Creo que la mayoría de estos comandos aún funcionan, pero es posible que deba ajustarlos.

¿Ha sido útil esta solución?