Heroku,Devise:出现“NoMethodError(undefined method `to_key' for:user:Symbol)”错误

6
我不知道什么时候出现了这个错误 NoMethodError (undefined method 'to_key' for :user:Symbol)

只有在Heroku Cedar堆栈上才会出现此行为。我使用Devise(1.4.2)通过Facebook进行身份验证,在Rails 3.1.0.rc6和ruby 1.9.2-p290上发生。它发生在sign_in_and_redirect(:user, authentication.user) 这一行。以下是我的方法:

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
2个回答

10

在本地计算机上进行任何操作之前,请先尝试重新启动 Heroku:

$ cd your_app_directory
$ heroku restart

我曾经遇到完全相同的问题,简单重启解决了它。


我也遇到了同样的问题,但是报错信息是 undefined method 'encrypted_password='。重启后问题得到解决 - 谢谢。 - Peter Nixey
谢谢!我也遇到了“ NoMethodError(未定义方法'...')”的问题,这个解决方案对我很有帮助。 - Jason Kim

1

我收到了完全相同的错误;然而,这只是在我在omniauth.rb初始化程序中配置我的主机名之后才开始出现的,如下所示:

OmniAuth.config.full_host = ‘http://hostname.com/subdirectory’

我添加了这个,因为我正在运行Rails3 w/ Passenger,在我的根域名的子目录中。也许你有相同的覆盖设置?

我仍然需要解决Facebook无法处理子目录回调的问题(Twitter可以正确地保留子目录而不需要full_host覆盖)。有什么想法吗?


我在我的初始化程序中没有这个覆盖。但我在初始化程序中有provider:facebook,'APP_ID','APP_SECRET' - Ivan
1
Twitter对你来说正常工作吗?从我的端口来看,这似乎是一个Facebook路径回调问题。 - cgrant
3
已修复。问题出在我这边。authentication.user_id 字段引用了一个不存在的 user 记录。这些错误真的很烦人。再次强调,我确实应该写更多的测试 :) - Ivan
你对认证控制器做了什么实际的更改?我在这个调用上仍然遇到错误:sign_in_and_redirect(:user, authentication.user)。我意识到我的问题始于将Ruby升级到1.9.2版本之后。任何帮助都将不胜感激。 - cgrant
我为该项目清理了宝石集合;我执行了 bundle update 命令;我重新启动并退出了所有 Ruby 进程;最后我重启了整个笔记本电脑;我删除了 Ancestry 宝石(因为在我安装它之后出现了这些问题);我删除了 ActiveAdmin;重新安装了这些宝石;重新启动了 Pow 几次,突然就好了。Ruby 是一门神奇的语言 ;) - Ivan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接