2016-04-05 11 views
10

Ho usato this method per le modali nei binari. Funziona davvero bene, ma sono appena passato a Rails 5 beta3 e ora non funziona in produzione.Rails 5 ignora la classe/lib?

ottengo questo errore:

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' 

è la mia eredità gettati via con Rails 5?

mio class ModalResponder < ActionController::Responder è in /lib e lavora in fase di sviluppo ...

Cerchi informazioni su modifiche con rotaie 5, ma le fonti sono limitati a mia conoscenza.

+2

Questo sembra un bug in Rails 5.0.0. È anche presente dopo essere stato fuori beta. Per me, succede solo nella produzione, non nello sviluppo. –

risposta

6

È necessario aggiungere un 'require' (su application.rb) con le classi all'interno del lib cartella.

come:

require './lib/someclass'

vi consiglio di metterlo all'interno di un plugin Rails.

+0

puoi descrivere il miglior processo per renderlo un plugin? Ho spostato il file lib nella mia directory/app in modo che fosse incluso, ma probabilmente non è il migliore? –

+1

Sicuro! Puoi leggere ulteriori informazioni sui plugin di rails [qui] (http://guides.rubyonrails.org/plugins.html). È meglio testare tutto e puoi aggiungere le impostazioni del file di caricamento all'interno del plugin. Basta creare un plugin e spostarti la cartella lib all'interno di essi, ti consiglio di creare un file 'Foo' per aggiungere le richieste. Nel tuo progetto application.rb basta aggiungere require 'foo'. Mi dispiace, il mio inglese hahah. –

+0

Puoi anche richiedere la cartella lib usando: 'config.autoload_paths << Rails.root.join ('lib')' –

-1

Si dice che non riesca a trovare lo ApplicationController::Responder che è stato spostato da Rails 4.2 in una gemma separata.

Aggiungi gem 'responders' al Gemfile

Le classi in lib non vengono caricati automaticamente, è necessario chiedere loro

+0

Ho la cartella lib caricata automaticamente nel mio application.rb ... –

+1

Posso selezionare questo come risposta se è possibile fornire un ragionamento sul motivo per cui lib non viene caricato automaticamente. Questa risposta non è sufficientemente dettagliata per meritare un assegno. –

15

Modifica questo:

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

a questo:

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

eager_load_paths otterrà avidamente caricato nella produzione e on-demand per lo sviluppo. Facendolo in questo modo, non è necessario richiedere esplicitamente ogni file.

Vedere ulteriori informazioni su this answer.