2016-06-12 13 views
3

Ich versuche eine neue Rails 5 Anwendung (Ruby 2.3.1, Rails 5.0.0.rc1) mit postgresql einzurichten, ersinnen Edelsteine ​​und es versagt rails db:seed aufgrund folgender Fehler auszuführen:Rails 5 - PG :: UndefinierteTabelle: FEHLER: relation "application_records" existiert nicht

PG::UndefinedTable: ERROR: relation "application_records" does not exist 
LINE 8:    WHERE a.attrelid = '"application_records"'::r... 
             ^
/Users//.rvm/gems/[email protected]/gems/activerecord-5.0.0.rc1/lib/active_record/connection_adapters/postgresql/database_statements.rb:88:in `async_exec' 
/Users/foo/.rvm/gems/[email protected]/gems/activerecord-5.0.0.rc1/lib/active_record/connection_adapters/postgresql/database_statements.rb:88:in `block in query' 
/Users/foo/.rvm/gems/[email protected]/gems/activerecord-5.0.0.rc1/lib/active_record/connection_adapters/abstract_adapter.rb:566:in `block in log' 
/Users/foo/.rvm/gems/[email protected]/gems/activesupport-5.0.0.rc1/lib/active_support/notifications/instrumenter.rb:21:in `instrument' 
/Users/foo/.rvm/gems/[email protected]/gems/activerecord-5.0.0.rc1/lib/active_record/connection_adapters/abstract_adapter.rb:560:in `log' 
/Users/foo/.rvm/gems/[email protected]/gems/activerecord-5.0.0.rc1/lib/active_record/connection_adapters/postgresql/database_statements.rb:87:in `query' 
/Users/foo/.rvm/gems/[email protected]/gems/activerecord-5.0.0.rc1/lib/active_record/connection_adapters/postgresql_adapter.rb:739:in `column_definitions' 
/Users/foo/.rvm/gems/[email protected]/gems/activerecord-5.0.0.rc1/lib/active_record/connection_adapters/postgresql/schema_statements.rb:227:in `columns' 

nach viel googeln, ich habe erkannt, dass dies etwas mit dem ApplicationRecord base class change in rails 5 zu tun hat. Natürlich gibt es keine Tabelle namens application_records und so sollte active_support nicht danach suchen. Ich habe bereits überprüft, dass app/models/application_record.rb existiert und den richtigen Inhalt hat. Auch das User-Modell (welches das einzige Modell in meiner App ist derzeit) erstreckt ApplicationRecord wie erwartet:

class User < ApplicationRecord 
    # Include default devise modules. Others available are: 
    # :confirmable, :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, 
     :recoverable, :rememberable, :trackable, :validatable 
end 

rails db: migrate läuft gut, aber rails db:seed Drosseln mit dem obigen Fehler.

Kann jemand etwas Licht auf das werfen, was dieses verursachen könnte?

Inhalt von application_record.rb:

class ApplicationRecord < ActiveRecord::Base 
    self.abstract_class = true 
end 
+0

Was ist der Inhalt Ihrer 'application_record.rb' Datei? –

+0

Inhalt von application_record.rb zur Frage hinzugefügt –

+1

Danke. Ich habe eine RC-App für Beispiel 5.0 erstellt, konnte dieses Problem jedoch nicht reproduzieren. Ich würde empfehlen, ein Problem mit dem Tracker "Rails" zu öffnen - https://github.com/rails/rails/issues/ - mit einer Beispielanwendung, die auf Github hochgeladen wurde und das Problem reproduziert. Tag mich als @ Prathamesh-Sonpatki auf Github Problem. Vielen Dank. –

Antwort

1

Meine eigene Frage zu beantworten, so dass es andere laufen in ähnliche Probleme helfen können.

Wie @PrathameshSonpatki auf der rails issue metioned, geschieht dies, weil userstamp gem Beziehungen auf ActiveRecord::Base injiziert anstatt ApplicationRecord. (Bitte beachten Sie, dass UserStamp Gem zum Zeitpunkt des Schreibens noch nicht kompatibel zu Rails 5 ist).

Wenn Sie ein Juwel haben noch nicht mit Schienen getestet 5 und Sie erhalten eine Ausgabe, in active_support geht auf einen Tisch suchen application_records genannt, überprüfen Sie, ob eines der Schmuckstücke Sie einspritzt Beziehungen auf der ActiveRecord::Base Klasse verwenden. Basierend auf this blog post, ist der eigentliche Zweck von ApplicationRecord, globale Injektion von ActiveRecord::Base zu vermeiden. Daher müssen Sie nach einer Version eines solchen Edelsteins suchen, die mit Rails 5 kompatibel ist, oder einen solchen Edelstein mit einem Patch versehen, um das erforderliche Verhalten in ApplicaitonRecord anstelle von ActiveRecord::Base einzufügen.

+0

Ich frage mich, was ist der beste Weg, um ein Juwel zu finden, die unsere App bricht. Wir haben ein paar Hundert und UserStamp ist nicht drin. – lzap

Verwandte Themen