2012-07-13 6 views
17

Ich versuche, meine Redmine von 1.3.0 auf 2.0.0 zu aktualisieren, aber ich habe Probleme mit der Datenbankmigration. Wenn ich den Befehl ausführen:ActiveRecord :: SubclassNotFound

rake db:migrate RAILS_ENV=production 

zeigt es ein Fehler wie

rake aborted! 
uninitialized constant RAILS_ENV 

Mein Fehlerprotokoll ist:

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' 

Hier die Liste von Plug-in ist, dass ich in meinem alten bin mit redmine:

  1. Google Apps-Plugin

  2. Redmine Code Review Plugin

  3. Redmine Hudson Plugin

Bitte helfen Sie mir

Antwort

14

Die Single-Table Vererbung Fehler wahrscheinlich durch eine Spalte mit dem Namen type in Ihrer Datenbank verursacht wird.

Wenn rails auf einen Spaltennamen namens type trifft, wird davon ausgegangen, dass es sich um ein Modell mit Unterklassen handelt, sodass der Typ das zu verwendende Modell unterscheidet. Ich nehme an, dass ein Plugin, das ursprünglich nicht für Schienen gebaut wurde, eine type Spalte in seinem Modell verwendet und dies dazu führt, dass Rails fehlschlägt.

62

Wenn jemand stolpert hier gibt es zwei Möglichkeiten, das Problem

  1. Sie nicht verwenden, um eine Spalte mit dem Namen Art zu beheben.
  2. manuell an die Spaltennamen etwas sinnlos:

    self.inheritance_column = :_type_disabled 
    

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

+2

'self.inheritance_column = nil' tut auch den Trick. – Amir

+1

Es ist einfacher, sie nur 'table_type' zu ​​benennen, anstatt Hacks mit' vererbung_column' zu machen. Ich habe das mit nil und einem Symbol versucht und die Anwendung hat das geerbte Modell in verschiedenen Bereichen beschädigt. –

+3

'Verwenden Sie keine Spalte mit dem Namen Typ. Vielen Dank ...... –