我使用gem rspotify在我的rails应用程序中访问spotify的API,rails版本是6.0.4,但最重要的是Ruby版本是3.0.0
当我尝试调用API方法时,我总是得到这个错误“undefined method 'encode' for URI:Module”。我必须强调,当我降级到Ruby 2.6.3时,我没有得到这个错误。看起来Ruby 3.0.0不支持URI编码。我的用户控制器是下面的代码示例。我在使用 spotify_user.country 和其他api方法时得到这个错误。
class UsersController < ApplicationController
skip_before_action :authenticate_user!, only: [ :spotify]
def spotify
spotify_user = RSpotify::User.new(request.env['omniauth.auth'])
spotify_user.country
end
end
在配置/应用程序.rb中
RSpotify::authenticate(ENV['SPOTIFY_CLIENT_ID'], ENV['SPOTIFY_CLIENT_SECRET'])
在device.rb中,我有
require 'rspotify/oauth'
Rails.application.config.middleware.use OmniAuth::Builder do
provider :spotify, ENV['SPOTIFY_CLIENT_ID'], ENV['SPOTIFY_CLIENT_SECRET'], scope:
'user-read-email playlist-modify-public user-library-read user-library-modify'
end
我想知道是否有一个不涉及降级ruby版本的错误解决方案
2条答案
按热度按时间liwlm1x91#
我从Ruby 2.4.5升级到Ruby 3.0.2,解决方案是替换
与
xqk2d5yq2#
URI.encode
是URI.escape
的别名,而URI.escape
在相当长的一段时间内被认为(并报告)过时了。最好查看您所询问的错误的回溯,但我猜它在这里失败了。
正如你所看到的here,RSpotify是不一致的,在一个地方使用
URI.encode
,在另一个地方使用Addressable::URI.encode
。机会是这是一个有意识的决定,但乍一看,它看起来只是一个偶然的事情。您的问题有几种解决方案:
1.派生RSpotify,修复这个问题(例如,用Addressable::URI.encode替换所有出现的URI.encode),并创建一个PR到上游。如果你急着升级,你可以使用你的固定派生。
1.你可以用monkey-patch URI本身来添加一个被移除的
encode
方法。这不是一个好主意,但仍然是一个选择...1.用其他客户端替换RSotify。最涉及的一个,所以放在这里只是为了完整:)