Fehler "Unbefugter Benutzer kann nicht automatisch geladen werden", wenn der Code in der Entwicklung geändert wurde

8

Ich habe ein Problem mit meiner Schienenanwendung. Nach einem Update von Rails 3 bis 4 . Wenn ich nach dem Starten des Servers im Entwicklungsmodus durch die Seiten surfe, ist alles in Ordnung.

Aber nach einer einzigen Codeänderung (sogar ein Leerzeichen hinzufügen) zeigt jede Seitenanforderung den folgenden Fehler.

  

Kontinuierlicher Benutzer kann nicht automatisch geladen werden, erwartet   /path/to/my/rails-app/app/models/user.rb um es zu definieren

Die Datei lebt genau dort und definiert die Klasse:

%Vor%

Ich habe viele Dinge mit config.autoload_paths und config.eager_load_paths in application.rb versucht, aber ohne Glück. Die Deaktivierung der Feder half auch nicht.

Das Entwickeln einer App und das Neustarten des Servers nach jeder einzelnen Änderung scheint in den 90er Jahren.

%Vor%

Einige relevante Konfigurationen:

development.rb

%Vor%

Anwendung.rb

%Vor%

Bearbeiten: Der Fehler meist wird in lib / auth / user_proxy.rb in der folgenden Funktion angezeigt. Vielleicht hilft dies, die Bandbreite der möglichen Ursachen einzuschränken.

%Vor%

Edit 2: Sortiere die Klassennamen in Edit 1 half (danke @Benjamin Sinclaire). Führt aber nur zu den nächsten Fehlern. Ich könnte auch vermeiden, Klassen zu verwenden. Aber bei folgendem Fehler in app / controllers / concerns / security.rb kann sich nichts ändern?

  

Kontinuierlicher Benutzer kann nicht automatisch geladen werden, erwartet   /path/to/my/rails-app/app/models/user.rb um es zu definieren

code:

%Vor%

mit dem aktuellen Benutzer im Thread gespeichert (Code von /path/to/my/rails-app/app/models/user.rb

%Vor%

Nur um es noch einmal klar zu stellen: Es funktioniert nach dem Neustart des Servers in der Entwicklung, bis ich irgendwo Code ändere.

    
Sandro L 23.09.2015, 07:03
quelle

2 Antworten

5

1 Sehen Sie, ob Sie eine Deklaration oder Deklaration mehrerer Klassen oder Module für mehrere Zeilen vorgenommen haben, und ändern Sie sie so, dass sie in mehreren Zeilen deklariert werden.

Anstelle von

%Vor%

Mach

%Vor%

2 Überprüfen Sie Ihre Modellzuordnungsdefinitionen, und stellen Sie sicher, dass Sie niemals constant verwenden. Verwenden Sie stattdessen eine Zeichenfolge.

Anstelle von

%Vor%

Mach

%Vor%

3 Habe gerade deine Bearbeitung gesehen. Können Sie so umgestalten?

%Vor%

4 Es ist keine gute Idee, ein aktives Datensatzobjekt im Threadspeicher zu serialisieren. Ändern Sie es wie folgt, um die Benutzer-ID zu speichern:

%Vor%     
Benj 29.09.2015 08:44
quelle
1

Sie müssen nicht app/models/concerns und app/controllers/concerns in Ihren autoload / equipload-Pfaden enthalten, da diese standardmäßig in Rails 4 enthalten sind: Ссылка

Stellen Sie außerdem sicher, dass Ihre Bedenken als Module definiert sind, erweitern Sie ActiveSupport::Concern und mit dem entsprechenden Dateinamen

%Vor%

Eine weitere Ursache für Ihr Problem könnte sein, dass einige Module / Klassen in app/decorators/concerns , lib , lib/shared die Klasse User verwenden was noch nicht geladen ist oder einige seiner Abhängigkeiten sind nicht geladen, also versuchen Sie require_relative path_to_user.rb am Anfang dieser Dateien

hinzuzufügen

----- Bearbeiten -------

Fügen Sie am oberen Rand von lib/auth/user_proxy.rb

hinzu %Vor%

Auf diese Weise entfernen Sie alle Unklarheiten beim automatischen Laden der User -Klasse, und Sie können sich nicht mit dem Autoloading von Rails herumschlagen. Weitere Informationen finden Sie hier: Ссылка , Ссылка

    
bigsolom 29.09.2015 11:52
quelle