2016-02-14 14 views
11

Avevo un'app rotaia che funzionava perfettamente con Devise 3 e rails 4. Ho aggiornato i binari a 5 e ha dato DEPRECATION WARNING: alias_method_chain is deprecated. Quindi ho dovuto cambiare la versione di devise in 4.0.0.rc1.Dopo aver effettuato l'aggiornamento a Rails 5 e Devise 4.0.0.rc1, il file dev'essere autenticato_utente! metodo non è definito

Ora sembra che il concepire non sta generando i metodi come authenticate_user!, is_admin ecc ..

sto ottenendo il seguente errore

Before process_action callback :authenticate_user! has not been defined (ArgumentError) 

Ho provato di tutto compreso, disinstallare elaborare e installare di nuovo, quindi ho provato a creare un modello separato da zero e ancora i metodi non sono definiti.

Qualche idea per favore?

+0

Ci sono aggiornamenti su questo? Sto cercando di implementare il coinvolgimento graduale su rails 5 e ottenere errori simili seguendo il wiki. –

+1

Non sono sicuro di quali errori si ottengono esattamente, nel mio caso si trattava di un upgrade di funzionalità in rails5 in cui può essere corretto aggiungendo un parametro aggiuntivo, l'ho menzionato nella risposta accettata. È possibile trovare il problema ispezionando i file inserendo un'istruzione debug 'binding.pry' Se lo si esegue dal terminale, è possibile ottenere un percorso di file e un numero di riga che genera l'errore, quindi non avere paura di tuffarsi in esso. – Hassan

risposta

6

Potrei identificare il problema, in rails 5, ci sarà un'eccezione se il metodo skipping non è definito al momento della chiamata a meno che non aggiungiamo la condizione :unless.

+0

puoi fornire maggiori dettagli su come hai risolto questo problema? –

+2

per ora ho impostato 'config.eager_load = false' in' config/environments/production.rb' come soluzione alternativa. –

+2

Il problema era che in rails 5, l'opzione skip callback genererà un'eccezione se il metodo che si desidera saltare non è definito. Nel mio codice sto saltando l'authenticate_user! metodo sull'inizializzazione dell'app, in quel momento il metodo non è definito, devise definisce i metodi in seguito. Se vogliamo che le rotaie non generino un'eccezione, dobbiamo usare un'altra clausola come segue: 'Devise :: SessionsController.skip_before_action: authenticate_user !, raise: false' – Hassan

1

Fino rails5 terre di supporto a concepire se stesso, si può provare a utilizzare questa forcella:

gem 'devise', github: 'twalpole/devise', branch: 'rails5' 
+0

Questo potrebbe fare con qualche spiegazione in più. –

+2

Probabilmente è obsoleto - quel fork ha 3 mesi e il master di sviluppo ora ha cambiamenti simili – Vasfed