2012-02-21 12 views
7

Tengo un problema muy molesto con mis migraciones.rake abortado constante no inicializada "Computadoras"

Primero el ErrorMessage:

bundle exec rake db:migrate --trace 
(in /home/myhomefolder/msdnaa) 
** Invoke db:migrate (first_time) 
** Invoke environment (first_time) 
** Execute environment 
** Execute db:migrate 
rake aborted! 
An error has occurred, all later migrations canceled: 

uninitialized constant Computers 

ahora tengo la suposición de que hay una actualización hecha por uno de nuestros administradores es la razón por la que esto sucede cada vez. ¡Incluso si no hay migraciones en absoluto!

Lo que he hecho (además de buscar en Stack Overflow para encontrar una solución) es grep cada archivo para "Computadoras". Por supuesto, hay algunos archivos que contienen esta palabra y los revisé en busca de errores de sintaxis y las cosas habituales como ":" faltante. Luego le pedí ayuda a un compañero de trabajo (él es mucho más habilidoso con Ruby que yo) y él no tiene ni idea, todo parece estar bien.

Estoy usando una versión ligeramente anterior de Ruby (1.8.7) y Rails (3.0.9), pero no tengo derecho a hacer una actualización en nuestro servidor, así que tengo que lidiar con eso. Y sí, le pedí al administrador que hiciera una actualización de 1.9.xy 3.1.x, pero esa no puede ser la culpa porque funcionó bien la semana pasada. Así que es uno de esos errores donde DEBERÍA funcionar, pero no funciona y apuesto a que la solución es tan fácil como beber agua, ¡pero no lo veo!

¿Alguna sugerencia?

EDIT: Aquí ist la --trace:

/var/lib/gems/1.8/gems/activesupport-3.0.9/lib/active_support/inflector/meth    ods.rb:113:in `constantize' 
/var/lib/gems/1.8/gems/activesupport-3.0.9/lib/active_support/inflector/meth    ods.rb:112:in `each' 
/var/lib/gems/1.8/gems/activesupport-3.0.9/lib/active_support/inflector/meth    ods.rb:112:in `constantize' 
/var/lib/gems/1.8/gems/activesupport-3.0.9/lib/active_support/core_ext/strin    g/inflections.rb:43:in `constantize' 
/var/lib/gems/1.8/gems/activerecord-3.0.9/lib/active_record/migration.rb:407    :in `load_migration' 
/var/lib/gems/1.8/gems/activerecord-3.0.9/lib/active_record/migration.rb:402    :in `migration' 
/var/lib/gems/1.8/gems/activerecord-3.0.9/lib/active_record/migration.rb:397    :in `migrate' 
/var/lib/gems/1.8/gems/activerecord-3.0.9/lib/active_record/migration.rb:539    :in `migrate' 
/var/lib/gems/1.8/gems/activerecord-3.0.9/lib/active_record/migration.rb:615    :in `call' 
/var/lib/gems/1.8/gems/activerecord-3.0.9/lib/active_record/migration.rb:615    :in `ddl_transaction' 
/var/lib/gems/1.8/gems/activerecord-3.0.9/lib/active_record/migration.rb:538    :in `migrate' 
/var/lib/gems/1.8/gems/activerecord-3.0.9/lib/active_record/migration.rb:525    :in `each' 
/var/lib/gems/1.8/gems/activerecord-3.0.9/lib/active_record/migration.rb:525    :in `migrate' 
/var/lib/gems/1.8/gems/activerecord-3.0.9/lib/active_record/migration.rb:435    :in `up' 
/var/lib/gems/1.8/gems/activerecord-3.0.9/lib/active_record/migration.rb:417    :in `migrate' 
/var/lib/gems/1.8/gems/activerecord-3.0.9/lib/active_record/railties/databas    es.rake:142 
/var/lib/gems/1.8/gems/rake-0.9.2/lib/rake/task.rb:205:in `call' 
/var/lib/gems/1.8/gems/rake-0.9.2/lib/rake/task.rb:205:in `execute' 
/var/lib/gems/1.8/gems/rake-0.9.2/lib/rake/task.rb:200:in `each' 
/var/lib/gems/1.8/gems/rake-0.9.2/lib/rake/task.rb:200:in `execute' 
/var/lib/gems/1.8/gems/rake-0.9.2/lib/rake/task.rb:158:in `invoke_with_call_    chain' 
/usr/lib/ruby/1.8/monitor.rb:242:in `synchronize' 
/var/lib/gems/1.8/gems/rake-0.9.2/lib/rake/task.rb:151:in `invoke_with_call_    chain' 
/var/lib/gems/1.8/gems/rake-0.9.2/lib/rake/task.rb:144:in `invoke' 
/var/lib/gems/1.8/gems/rake-0.9.2/lib/rake/application.rb:112:in `invoke_tas    k' 
/var/lib/gems/1.8/gems/rake-0.9.2/lib/rake/application.rb:90:in `top_level' 
/var/lib/gems/1.8/gems/rake-0.9.2/lib/rake/application.rb:90:in `each' 
/var/lib/gems/1.8/gems/rake-0.9.2/lib/rake/application.rb:90:in `top_level' 
/var/lib/gems/1.8/gems/rake-0.9.2/lib/rake/application.rb:129:in `standard_e    xception_handling' 
/var/lib/gems/1.8/gems/rake-0.9.2/lib/rake/application.rb:84:in `top_level' 
/var/lib/gems/1.8/gems/rake-0.9.2/lib/rake/application.rb:62:in `run' 
/var/lib/gems/1.8/gems/rake-0.9.2/lib/rake/application.rb:129:in `standard_e    xception_handling' 
/var/lib/gems/1.8/gems/rake-0.9.2/lib/rake/application.rb:59:in `run' 
/var/lib/gems/1.8/gems/rake-0.9.2/bin/rake:32 
/var/lib/gems/1.8/bin/rake:19:in `load' 
/var/lib/gems/1.8/bin/rake:19 
Tasks: TOP => db:migrate 
+1

¿Cuál es el resto del mensaje de error? Usa la opción '--trace' pero has cortado la pila trace – Gareth

+0

¡Añadido! Ver la publicación ... – ProblemChild

Respuesta

22

Mi conjetura es que se acaba de agregar una migración llama algo así como 20120221123456_computers.rb, y dentro de él, usted tiene algo así como ...

class SomeNameThatsNotComputers < ActiveRecord::Migration 
    ... 

Cuando Rails ejecuta una migración, espera ejecutar el archivo, que define la clase, crear una instancia de la clase y llamar a #up o #down en esa instancia de clase. ¿Cómo sabe Rails qué clase instanciar? Se supone que corresponde con la parte del nombre del archivo que sigue al prefijo numérico y el guión bajo, por lo que para un nombre de archivo como 20120221123456_computers.rb, el nombre de clase debe ser Computadoras.

+0

Eso fue todo ... algo así! Lo que olvidé decir con toda mi frustración fue que este proyecto se transfirió de Windows a Linux. Así que DEBERÍA ser el problema PERO no le presté atención a los nombres de las clases (gracias por la pista). La clase en realidad se llamaba CreateComputers ... lo que no tiene sentido en absoluto, pero cambiar el nombre a Computers solucionó el problema ... como dije: ¡Tan fácil como beber agua! ¡Muchas gracias! – ProblemChild

+0

Oh, NO DEBERÍA ser el problema de couse;) – ProblemChild

+0

Ah sí, me echó porque mencionó en su pregunta: "Incluso si no hay migraciones en absoluto". – Gareth

0

Como usted ha dicho grep dice existencia de "Ordenadores" Ese es el problema. Significa que las computadoras no están definidas, sino que se están usando. la migración carga el entorno de aplicación primero y que el tiempo se produce un error bcoz Las computadoras no se ha inicializado

Cuestiones relacionadas