2012-02-22 3 views
7

Provare a migrare la mia app da Rails da 3.0 a 3.2, e come parte di questo sto aggiornando anche Devise gem. È risultato che il nuovo Devise richiede la nuova gemma OmniAuth. Ho l'autorizzazione Facebook configurata con OmniAuth. Dopo aver letto la guida alla migrazione ho aggiunto anche omniauth-facebook gem e l'ho configurato in devise.rb.Migrazione a OmniAuth 1.0: metodo non definito `user_omniauth_authorize_path '

Ora sto ottenendo questo errore:

ActionView::Template::Error (undefined method `user_omniauth_authorize_path' for #<#:0x00000003b01e88>)

stavo usando questo percorso per il pulsante di login di Facebook. Cosa dovrei usare ora?

modello User contiene questo (user.rb):

# Include default devise modules. Others available are: 
    # :token_authenticatable, :confirmable, :lockable and :timeoutable 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable, 
     :omniauthable 

log del server completa:

Started GET "/" for 127.0.0.1 at 2012-02-22 10:39:27 +0200 
Processing by PagesController#guardian as HTML 
[paperclip] Duplicate URL for photo with /system/:attachment/:id/:style/:filename. This will clash with attachment defined in Asset class 
    Rendered pages/guardian.html.erb within layouts/application (955.6ms) 
Completed 500 Internal Server Error in 1245ms 

ActionView::Template::Error (undefined method `user_omniauth_authorize_path' for #<#<Class:0x00000003b213f0>:0x00000003b01e88>): 
    30:  </p> 
    31:    </td> 
    32:    <td> 
    33:    <%= link_to "Login with Facebook", user_omniauth_authorize_path(:facebook), :class => "login_with_facebook_button" %> 
    34:    </td> 
    35:   </tr> 
    36:  </table> 
     app/views/pages/guardian.html.erb:33:in `_app_views_pages_guardian_html_erb___1979224720320394612_27892940' 

Update: Ok, sono riuscito a ottenere risolto questo problema percorso. Ora quando clicco sul pulsante di accesso di Facebook, sto ottenendo questo:

Started GET "https://stackoverflow.com/users/auth/facebook" for 127.0.0.1 at 2012-02-23 16:02:01 +0200 

NoMethodError (undefined method `include?' for nil:NilClass): 
    omniauth (1.0.2) lib/omniauth/strategy.rb:165:in `call!' 
    omniauth (1.0.2) lib/omniauth/strategy.rb:148:in `call' 
    warden (1.1.1) lib/warden/manager.rb:35:in `block in call' 
    warden (1.1.1) lib/warden/manager.rb:34:in `catch' 
    warden (1.1.1) lib/warden/manager.rb:34:in `call' 

Questo è tutto un po 'di confusione. Il problema del percorso è stato risolto dopo aver specificato i parametri: facebook in questo tutorial: https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview. Ora ho anche notato che mi manca omniauth.rb dalla cartella config/initializers, che è menzionata nel wiki di omniauth-facebook. Ho creato omniauth.rb con il seguente contenuto, ma ancora ottenere lo stesso problema:

Rails.application.config.middleware.use OmniAuth::Builder do 
    provider :facebook, ENV['APP_ID'], ENV['APP_SECRET'] 
    end 
+0

Puoi PASE StackTrace completa? – shingara

+0

Aggiunto registro server –

+0

È stato aggiunto omniauthable nel modello utente? – shingara

risposta

5

Ho risolto questo problema eseguendo escogitare nuovo generatori. I due file che dovrebbero essere verificati sono: config/routes.rb e models/user.rb

Nel file routes.rb, ci sarà un duplicato 'devise_for' in alto e user.rb avrà moduli di configurazione predefiniti, quindi "omniauthable" dovrà essere aggiunto qui.

+0

Grazie, proverò questo! –

+0

Intendi questi generatori? '> rails genera il servizio del modello user_id: provider intero: string uid: string uname: string uemail: string > rails genera servizi controller' –

+0

I problemi continuano a verificarsi. Anche l'esecuzione di percorsi rake non elenca questo percorso. Mi chiedo dove questo percorso è stato originariamente specificato. –

4

Luogo devise: omniauthable sull'utente model.Currently mie versioni sono disposizione testamentaria 2.0.4, 1.1.0 omniauth & omniauth-facebook 1.2.0

+0

perfetto ... hai salvato la mia giornata ... grazie – Dave