2012-07-13 13 views
17

Sto tentando di aggiornare il mio redmine dalla versione 1.3.0 alla 2.0.0, ma ho problemi con la migrazione del database. Quando faccio funzionare l'ordine:ActiveRecord :: SubclassNotFound

rake db:migrate RAILS_ENV=production 

mostra un errore come

rake aborted! 
uninitialized constant RAILS_ENV 

mio log degli errori è:

ActiveRecord::SubclassNotFound (The single-table inheritance mechanism failed to locate the subclass: 'GoogleAppsAuthSource'. This error is raised because the column 'type' is reserved for storing the class in case of inheritance. Please rename this column if you didn't intend it to be used for storing the inheritance class or overwrite AuthSource.inheritance_column to use another column for that information.): 
app/models/user.rb:139:in `try_to_login' 
app/controllers/account_controller.rb:143:in `password_authentication' 
app/controllers/account_controller.rb:138:in `authenticate_user' 
app/controllers/account_controller.rb:30:in `login' 

Ecco l'elenco dei plugin che sto usando nella mia vecchia redmine:

  1. Plug-in Google Apps

  2. plug Redmine Code Review plug

  3. Redmine Hudson

Please help me

risposta

14

L'errore di eredità a tavolo singolo è probabilmente causato da una colonna denominata type nel database.

Se le rotaie incontrano un nome di colonna chiamato type, si presuppone che sia un modello che ha sottoclassi in modo che il tipo discrimini quale modello utilizzare. Immagino che alcuni plugin che non sono stati originariamente creati per le rotaie utilizza una colonna type nel suo modello e che fa sì che Rails fallisca.

62

se qualcun altro inciampa qui ci sono due modi per risolvere il problema

  1. Non utilizzare una colonna denominata tipo.
  2. impostare manualmente il nome della colonna a qualcosa di inutile:

    self.inheritance_column = :_type_disabled 
    

    See: http://apidock.com/rails/ActiveRecord/Base/inheritance_column/class

+2

'self.inheritance_column = quelle negative fa anche il trucco. – Amir

+1

È più facile rinominarlo 'table_type' invece di fare hack con' inheritance_column' Ho provato questo con nil e un simbolo e l'applicazione si è rotta sul modello ereditato in aree diverse. –

+3

'Non usare una colonna di nome tipo. Grazie mille ...... –