2012-02-21 21 views
7

Ho un problema molto fastidioso con le mie migrazioni.rastrellato costante non inizializzata "Computer"

In primo luogo l'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 

ora ho l'ipotesi che un aggiornamento fatto da uno dei nostri amministratori è il motivo per cui questo accade ogni volta. Anche se non ci sono affatto migrazioni!

Quello che ho fatto (oltre a cercare su Stack Overflow per una soluzione) è quello di caricare ogni singolo file per "Computer". Ovviamente ci sono alcuni file contenenti questa parola e li ho controllati per gli errori di sintassi e la solita roba come mancante ":". Poi ho chiesto aiuto a un compagno di lavoro (lui è molto più abile con il rubino di quanto lo sia io) e non ha idea, tutto sembra a posto.

Sto usando una versione leggermente vecchia di Ruby (1.8.7) e Rails (3.0.9), ma non ho alcun diritto di fare un aggiornamento sul nostro Server, quindi devo affrontarlo. E sì, ho chiesto all'amministratore di fare un aggiornamento a 1.9.xe 3.1.x, ma questo non può essere l'errore perché ha funzionato bene la settimana scorsa. Quindi è uno di quegli errori in cui DOVREBBE funzionare, ma non lo fa e scommetto che la soluzione è semplice come l'acqua potabile, ma non la vedo!

Qualche suggerimento?

EDIT: Ecco il ist --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

Qual è il resto del messaggio di errore? Usa l'opzione '--trace' ma hai tagliato la traccia dello stack – Gareth

+0

Aggiunto! Vedi il post ... – ProblemChild

risposta

22

La mia ipotesi è che si è appena aggiunto una migrazione chiamato qualcosa come 20120221123456_computers.rb, e al suo interno, si ha qualcosa di simile ...

class SomeNameThatsNotComputers < ActiveRecord::Migration 
    ... 

Quando rotaie esegue una migrazione, si prevede di eseguire il file, che definisce la classe, e quindi un'istanza della classe e chiamare #up o #down in tale istanza classe. In che modo Rails sa quale classe istanziare? Dovrebbe corrispondere alla parte del nome del file che segue il prefisso numerico e il carattere di sottolineatura, quindi per un nome di file come 20120221123456_computers.rb, il nome della classe deve essere Computer.

+0

E 'stato ... un po'! Quello che ho dimenticato di dire in tutta la mia frustrazione è che questo progetto è stato portato da Windows a Linux. Quindi DOVREBBE essere il problema, MA non ho prestato attenzione ai nomi delle classi (grazie per il suggerimento). La classe era in realtà chiamata CreateComputers ... ciò che non ha senso, ma cambiare il nome in Computer ha risolto il problema ... come ho detto: Facile come acqua potabile! Grazie mille! – ProblemChild

+0

Oh NON DEVE essere il problema di couse;) – ProblemChild

+0

Ah sì, mi ha gettato perché hai citato nella tua domanda: "Anche se non ci sono affatto migrazioni". – Gareth

0

Come hai detto grep dice esistenza di "Computer" Questo è il problema. Significa che i computer non sono definiti ma vengono utilizzati. migrazione carica l'ambiente prima applicazione e che il tempo non riesce bcoz I computer non è inizializzata

Problemi correlati