2016-04-05 7 views
10

Ich habe this method für Modale in Schienen verwendet. Es funktioniert wirklich gut, aber ich habe gerade auf Rails 5 Beta3 aktualisiert, und jetzt funktioniert es nicht in der Produktion.Rails 5 Ignorieren/Lib-Klasse?

ich diesen Fehler:

Completed 500 Internal Server Error in 22ms (ActiveRecord: 0.9ms) 

NameError (uninitialized constant ApplicationController::ModalResponder): 

app/controllers/application_controller.rb:26:in `respond_modal_with' 
app/controllers/tools_controller.rb:28:in `new' 

Ist mein Erbe mit Rails abgeworfen 5?

Mein class ModalResponder < ActionController::Responder ist in /lib und arbeitet in der Entwicklung ...

die Suche nach Informationen über Änderungen mit Schienen 5, aber Quellen sind mein Wissen beschränkt.

+2

Dies scheint ein Fehler in Rails 5.0.0. Es ist auch vorhanden, nachdem es die Betaversion verlassen hat. Für mich passiert es nur in der Produktion, nicht in der Entwicklung. –

Antwort

6

benötigen Sie benötigen ein 'require' hinzufügen (auf application.rb) mit Klassen in der lib Mappe.

Like:

require './lib/someclass'

Ich empfehle Ihnen, es in einem Rails-Plugin setzen. diese

+0

können Sie den besten Prozess beschreiben, um es zu einem Plugin zu machen? Ich habe die lib-Datei in mein/app-Verzeichnis verschoben, damit sie enthalten ist, aber das ist wahrscheinlich nicht das Beste? –

+1

Sicher! Sie können mehr über Rails Plugins [hier] lesen (http://guides.rubyonrails.org/plugins.html). Es ist besser, alle zu testen, und Sie können Einstellungen für die Ladedatei im Plugin hinzufügen. Erstellen Sie einfach ein Plugin und verschieben Sie Ihren lib-Ordner in ihnen, ich empfehle, eine Datei 'Foo' zu erstellen, um die Anforderungen hinzuzufügen. Fügen Sie in Ihrem application.rb-Projekt nur 'require' foo 'hinzu. Entschuldigung mein Englisch hahah. –

+0

Sie können den lib-Ordner auch mit folgendem Befehl anfordern: 'config.autoload_paths << Rails.root.join ('lib')' –

-1

Es besagt, dass es die ApplicationController::Responder nicht finden kann, die aus Rails 4.2 in ein separates Juwel verschoben wurde.

hinzufügen gem 'responders' zu Ihrem Gemfile

Klassen in lib sind nicht automatisch geladen, müssen Sie sie

+0

Ich habe das lib-Verzeichnis automatisch geladen in meiner application.rb ... –

+1

Ich kann dies als eine Antwort auswählen, wenn Sie Argumentation dafür liefern können, warum lib nicht automatisch geladen wird. Diese Antwort ist nicht detailliert genug, um einen Scheck zu verdienen. –

15

Wechsel:

config.autoload_paths << Rails.root.join('lib') 

dazu:

config.eager_load_paths << Rails.root.join('lib') 

eager_load_paths wird eifrig in der Produktion geladen werden und On-Demand in der Entwicklung. Auf diese Weise müssen Sie nicht jede Datei explizit anfordern.

Weitere Informationen finden Sie unter this answer.