ruby-on-rails dbmigrate schema.rb

ruby on rails - Rails: actualizo el archivo de migración y luego ejecuto db: migrate, pero mi esquema no se está actualizando



ruby-on-rails dbmigrate (7)

Estoy tratando de agregar un campo adicional a una de mis tablas.

He añadido el campo en el archivo de migración (en db / migrate), luego ejecuté ''rake db: migrate'' que se ejecutó sin problemas. Mi editor de texto incluso me dijo que mi archivo schema.db ha sido actualizado y necesita actualizarse.

El archivo de esquema no contiene mi nuevo campo y cualquier intento de hacer referencia al campo desde mis puntos de vista falla estrepitosamente.

¿Cómo hago esto? ¿Es posible actualizar una tabla con un campo adicional a través de rieles sin tener que abandonar por completo y volver a crear la base de datos?


Hice lo mismo, quería cambiar el nombre de un campo y en lugar de esto:

class CreateComments < ActiveRecord::Migration def change create_table :comments do |t| t.string :commenter t.text :body # this line adds an integer column called `article_id`. t.references :article, index: true t.timestamps end end end

Cambié

t.text :body

a

t.text :comment_body

Traté de hacer rastrillo

db:migrate

no sucedió nada, ya que en el indicador de comando volvía a aparecer sin ningún resultado ..., miré el desbordamiento de pila y this me guió a hacer rake

db:migrate:redo

sin poner

== 20141129044056 CreateComments: reverting =================================== -- drop_table(:comments) -> 0.0000s == 20141129044056 CreateComments: reverted (0.0886s) ========================== == 20141129044056 CreateComments: migrating =================================== -- create_table(:comments) -> 0.0040s == 20141129044056 CreateComments: migrated (0.0040s) ==========================

y luego cargué mi página / controlador con commenter_body en lugar de body y se cargó perfectamente.

Creo que esto también es una solución para el mismo. No sé si hay algún problema en el funcionamiento debajo del modelo / DB (todavía soy muy nuevo en RoR, en realidad mi tercer día ...)


No sé si esto aplica, pero vale la pena intentarlo. Directamente de " Desarrollo ágil con rieles, 3ª edición ":

A veces, esta tabla schema_migrations puede causarle problemas. Por ejemplo, si crea el archivo fuente de migración y ejecuta db:migrate antes de agregar cualquier declaración de definición de esquema al archivo, la base de datos pensará que se ha actualizado, y la tabla de información del esquema contendrá el nuevo número de versión.
Si luego edita ese archivo de migración existente y ejecuta db:migrate nuevamente, Rails no sabrá cómo aplicar sus nuevos cambios. En estas circunstancias, a menudo es más fácil eliminar la base de datos, volver a crearla y volver a ejecutar las migraciones.


Pude regenerar mi esquema con las últimas migraciones ejecutando rake db:schema:dump



Siempre debe crear un nuevo archivo de migración al agregar / cambiar algo en la base de datos. Este es el propósito de las migraciones. Un archivo de migración debe tener la capacidad de realizar el nuevo cambio y deshacer el cambio. De esta manera, si algo sale mal o cambia de opinión, puede volver fácilmente a una migración anterior.

Las siguientes secciones de enlaces etiquetadas como "Anatomía de una migración" y "Cómo escribir una migración" pueden ser de ayuda.

http://guides.rubyonrails.org/migrations.html


Una vez que hagas rake db: migrate entonces otra vez u no puedes agregar una columna a ese archivo. Tienes que generar un nuevo archivo de migración usando rails g migration add_columnname_to_tablename para agregar esa columna en particular y hacer rake db: migrate. ¡Eso es todo!


http://guides.rubyonrails.org/migrations.html#changing-existing-migrations

Ocasionalmente cometerás un error al escribir una migración. Si ya ha ejecutado la migración, no puede simplemente editar la migración y ejecutar la migración nuevamente: Rails cree que ya ha ejecutado la migración y, por lo tanto, no hará nada cuando ejecute rake db: migrate. Debe revertir la migración (por ejemplo, con rake db:rollback ), editar su migración y luego ejecutar rake db:migrate para ejecutar la versión corregida.