Hak*_*aba 7 ruby uri ruby-on-rails urlencode spotify
我正在使用gem rspotify来访问我的 Rails 应用程序中的 Spotify 的 api。Rails 版本是 6.0.4 但最重要的是 Ruby 版本是 3.0.0
当我尝试调用 api 方法时,我不断收到此错误“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
Run Code Online (Sandbox Code Playgroud)
在config/application.rb中
RSpotify::authenticate(ENV['SPOTIFY_CLIENT_ID'], ENV['SPOTIFY_CLIENT_SECRET'])
Run Code Online (Sandbox Code Playgroud)
在 devise.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
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一个不涉及降级 ruby 版本的错误解决方案
Dav*_*ave 14
我从 Ruby 2.4.5 升级到 Ruby 3.0.2,我的解决方案是替换
URI.encode
Run Code Online (Sandbox Code Playgroud)
和
CGI.escape
Run Code Online (Sandbox Code Playgroud)
URI.encode是它的别名,URI.escape在相当长一段时间内被认为(并报告)已过时。
最好查看您所询问的错误的回溯,但我想它在这里失败了。
正如您在这里所看到的,RSpotify 并不一致,URI.encode在一个地方和Addressable::URI.encode另一个地方使用。这很可能是一个有意识的决定,但乍一看它看起来像是一个偶然的事情。
对于您的问题,有几种解决方案:
Fork RSpotify,修复问题(例如,将所有出现的 URI.encode 替换为 Addressable::URI.encode)并创建一个到上游的 PR。如果急于升级,您可以同时使用固定前叉。
您可以对 URI 本身进行猴子修补,添加已删除的encode方法。根本不是一个好主意,但仍然是一个选择......
将 RSpotify 替换为其他客户端。最涉及的一个,所以放在这里只是为了完整性:)
| 归档时间: |
|
| 查看次数: |
10833 次 |
| 最近记录: |