update rails column ruby-on-rails ruby-on-rails-3 activerecord rake rails-migrations

ruby on rails - column - Rails rake db: migrate no tiene efecto



rake db rollback migration (5)

Hice una nueva aplicación Rails 3 hoy, agregué una migración simple, y por alguna razón, no sucede nada cuando hago rake db: migrate. Simplemente hace una pausa de unos segundos, luego vuelve al símbolo del sistema, sin errores ni nada. Schema.rb y la base de datos permanecen vacías.

¿Alguna idea de lo que podría estar pasando? He hecho muchas aplicaciones y nunca tuve este problema. Todo es una configuración totalmente estándar también.


Bueno, descubrí qué estaba causando mi problema. Estoy usando la gema slim_scrooge y comentarla hace que todo continúe normalmente. No sé por qué, aunque ...


Hay algunas razones por las cuales sus migraciones no se ejecutarán, pero la más común es que el sistema ya tiene la impresión de que todas las migraciones que ha definido ya se han ejecutado.

Cada migración crea una entrada en la tabla schema_migrations con la columna de version correspondiente al número identificador. Si desea obligar a una migración a volver a ejecutar, por lo general puede anularla y volver a intentarlo. Por ejemplo, si tuviera 20100421175455_create_things.rb , lo volvería a ejecutar usando:

rake db:migrate:redo VERSION=20100421175455

Una situación común es que su migración no se pudo ejecutar en primer lugar, que generó una excepción, por ejemplo, y aun así Rails todavía la considera completa. Para volver a ejecutar por la fuerza una migración, elimine el registro correspondiente de la tabla schema_migrations y ejecute rake db:migrate nuevamente.

Una forma de evitar este tipo de problema en el futuro es definir sus migraciones con un procedimiento de retroceso automático:

class CreateThings < ActiveRecord::Migration def self.up # ... (migration) ... rescue # If an exception occurs, back out of this migration, but ignore any # exceptions generated there. Do the best you can. self.down rescue nil # Re-raise this exception for diagnostic purposes. raise end end

Si tiene un error en su migración, verá la excepción enumerada en la consola. Como la migración se ha retrotraído automáticamente, debería poder ejecutarla una y otra vez hasta que lo haga correctamente.


Hoy me enfrenté a un problema similar mientras migraba el complemento para Redmine usando

rake redmine:plugins:migrate RAILS_ENV=production NAME=plugin_name

donde plugin_name es en realidad el nombre del complemento definido en init.rb del complemento.

Luché durante 4 horas y finalmente descubrí que el nombre de mi directorio de complementos no era el mismo que el nombre del complemento (nota redmine_ prefix):

~/redmine/plugins/redmine_plugin_name

Por lo tanto, asegúrese de que su complemento se coloque en una carpeta con el nombre del nombre del complemento. Creo que se aplica a otras aplicaciones de rieles también.


Llamar a la spring stop podría resolver sus problemas.


Me enfrenté al mismo problema. Hice una especie de truco corto que me ayudó. Lo estoy publicando por si acaso alguien quiere una solución corta y dulce. Estoy de acuerdo con lo que dice Tadman

"el sistema ya tiene la impresión de que todas las migraciones que ha definido ya se han ejecutado"

Lo que hice fue cambiar el nombre del archivo migrate en la carpeta / app_folder / db / migrate . Creo que la parte numérica en el nombre del archivo de migración de ruby ​​es la hora en la que se creó el archivo.

Puede agregar decir 1, al nombre del archivo, cada vez que quiera volver a ejecutar la migración. Después de cambiar el nombre, suelte / elimine la tabla (utilicé la herramienta de línea de comandos de mysql para eliminar) y luego ejecute rake db: migrate y las migraciones deberían hacerse.