将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
答案 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。而且效果很好。谢谢。