2011-08-23 14 views
6

No sé cuando sucedió, pero estoy recibiendo este error NoMethodError (undefined method 'to_key' for :user:Symbol)Heroku, idearán: Getting 'NoMethodError (método no definido `to_key' para: usuario: Símbolo)'

Este comportamiento sólo ocurre en Heroku Cedar apilar. Uso Devise (1.4.2) para la autenticación a través de Facebook en Rails 3.1.0.rc6 y ruby ​​1.9.2-p290. Ocurre en la línea con sign_in_and_redirect(:user, authentication.user). Aquí está mi método:

def create 
    omniauth = request.env['omniauth.auth']  

    authentication = Authentication.find_by_provider_and_uid(omniauth['provider'], omniauth['uid']) 


    if !authentication.nil? 
    flash[:notice] = I18n.t('devise.omniauth_callbacks.success', kind: omniauth['provider']) 

    sign_in_and_redirect(:user, authentication.user) 
    elsif current_user 
    current_user.authentications.create!(provider: omniauth['provider'], uid: omniauth['uid']) 
    redirect_to profile_path, notice: I18n.t('devise.omniauth_callbacks.success', kind: omniauth['provider']) 
    else 
    user = User.new 
    user.apply_omniauth(omniauth) 
    if user.save 
     flash[:notice] = I18n.t('devise.omniauth_callbacks.success', kind: omniauth['provider']) 
     sign_in_and_redirect(:user, user) 
    else 
     session[:omniauth] = omniauth.except('extra') 
     redirect_to new_user_registration_url 
    end 
    end 
end 

Respuesta

9

Antes de hacer nada en el equipo local, intenta reiniciar heroku primera:

$ cd your_app_directory 
$ heroku restart 

que tenían exactamente el mismo problema y un simple reinicio arreglado.

+0

Tuve el mismo problema pero con 'método indefinido' encrypted_password = ''. El reinicio funcionó para mí también - gracias –

+0

¡Gracias! Tuve el mismo problema que 'NoMethodError (método indefinido '...' y esto me solucionó el problema. –

+0

Eso fue lo que hizo. ¡Gracias! – TinkerTank

1

Estoy recibiendo el mismo error exacto; sin embargo, sólo se inició después de haberla configurado mi nombre de host en el inicializador omniauth.rb como tan:

OmniAuth.config.full_host = 'http://hostname.com/subdirectory'

He añadido esto porque Estoy ejecutando Rails3 con Passenger en un subdirectorio fuera de mi dominio raíz. Tal vez usted tiene la misma anulación en su lugar?

Todavía tengo que remediar la incapacidad de Facebook para manejar una devolución de llamada de subdirectorio (twitter conserva adecuadamente el subdirectorio sin la anulación de host_host). ¿Pensamientos?

+0

No tengo esta anulación en mi inicializador. Tengo 'provider: facebook, 'APP_ID', 'APP_SECRET'' en el inicializador. – Ivan

+1

¿Twitter trabaja para usted? Parece ser un problema de devolución de ruta con Facebook desde mi extremo. – cgrant

+3

Solucionado. Fue un problema de mi parte. El campo 'authentication.user_id' hizo referencia a un registro de' usuario' no existente. Estos errores son realmente molestos. Una vez más, realmente debería escribir más pruebas :) – Ivan

Cuestiones relacionadas