2013-06-09 10 views
29

In una nuova app di rotaie 4 ho riscontrato un errore costante non intenzionale per un modulo. Il modulo si chiama ProcessBill e si trova in lib/process_bill.rbRails 4 costante non inizializzata per il modulo

errore console:

ActionController::RoutingError (uninitialized constant BillsController::ProcessBill): 

codice del controller:

class BillsController < ApplicationController 

    include ProcessBill 

lib/process_bill.rb

module ProcessBill 

risposta

54

Hai aggiunto lib al tuo percorso di caricamento automatico? Questo è stato necessario in Rails 3, non sono sicuro se è ancora necessario per Rails 4.

Prova ad aggiungere questo nella definizione di classe in config/application.rb -

config.autoload_paths += %W(#{config.root}/lib) 
3

Prova ad aggiungere questa linea nella parte superiore del controller:

require "#{Rails.root}/lib/process_bill.rb" 
+3

È anche possibile fare solo "require 'process_bill', come la directory 'lib' è già sul percorso di caricamento. –

+6

Attenzione, questo uccide il ricaricamento automatico! – reto

23

avevo anche questo problema con la directory lib con Rails 5 ed è apparso in produzione ma non in sviluppo. Per risolvere il problema è necessario aggiungere la directory lib a eager_load_paths. Ecco la parte rilevante dal mio application.rb:

config.autoload_paths << "#{Rails.root}/lib" 
config.eager_load_paths << "#{Rails.root}/lib" 
+3

Questo articolo spiega perché: http://collectiveidea.com/blog/archives/2016/07/22/solutions-to-potential -upgrade-problems-in-rails-5/ – lucke84

+1

funziona anche in Rails 4 –

1

Questo funziona anche in Rails 5 al file application.rb:

config.autoload_paths << Rails.root.join('lib') 
    config.autoload_paths << Rails.root.join('lib/notifier') 
Problemi correlati