NoMethodError(JsonWebToken:Module的未定义方法“ encode”)

时间:2019-08-26 14:10:02

标签: ruby-on-rails ruby jwt

将Rails版本从4.2升级到5.0后,我遇到了JWT gem文件的问题。

有人可以帮我吗?

我正在使用Rails-5.0.7.2 红宝石-2.5.3 JwT-2.2.1

require 'jwt'

payload = { data: 'test' }

token = JWT.encode payload, nil, 'none'

Traceback (most recent call last):
8: from bin/rails:11:in <main>' 7: from bin/rails:11:in require'
6: from /home/sahu/.rvm/gems/ruby-2.5.3/gems/railties-5.0.7.2/lib/rails/commands.rb:18:in <top (required)>' 5: from /home/sahu/.rvm/gems/ruby-2.5.3/gems/railties-5.0.7.2/lib/rails/commands/commands_tasks.rb:49:in run_command!'
4: from /home/sahu/.rvm/gems/ruby-2.5.3/gems/railties-5.0.7.2/lib/rails/commands/commands_tasks.rb:78:in console' 3: from /home/sahu/.rvm/gems/ruby-2.5.3/gems/railties-5.0.7.2/lib/rails/commands/console_helper.rb:9:in start'
2: from /home/sahu/.rvm/gems/ruby-2.5.3/gems/railties-5.0.7.2/lib/rails/commands/console.rb:65:in start' 1: from (irb):3 NoMethodError (undefined method encode' for JsonWebToken:Module)

我尝试通过降级Jwt gem版本,但仍然面临同样的问题。

并收到如下警告-

/home/sahu/.rvm/gems/ruby-2.5.3/gems/json_web_token-0.3.5/lib/json_web_token.rb:36: warning: already initialized constant JWT
/home/sahu/.rvm/gems/ruby-2.5.3/gems/jwt-2.2.1/lib/jwt/base64.rb:5: warning: previous definition of JWT was here

1 个答案:

答案 0 :(得分:1)

最后,我找到了问题。 在升级我的Rails版本之前,我有 JWT Gem,在升级我的Rails版本之后。我添加了一个新的宝石 intuit-oauth 。此gem对json_web_token gem具有依赖性。因此,在安装 intuit-oauth gem之后,它会自动安装 json_web_token gem。由于此宝石, JWT 对象已更改。例如当我在控制台中点击访问 JWT 时。它返回为 JsonWebToken 对象。也许这个宝石覆盖了 JWT 宝石。因此,对于临时解决方案,我删除了 intuit-oauth gem。而且效果很好。谢谢。