首页 > 解决方案 > Ruby Twitter gem:在 twitter_client.update 上 nil:NilClass 的未定义方法“each_byte”

问题描述

我对宝石有奇怪的问题。它在 rails 控制台中运行良好,但从 lib/ 中却不是

nil:NilClass 的未定义方法“each_byte”连续

twitter_client.update(tweet_text.to_s)
def twitter_client
  Twitter::REST::Client.new do |config|
    config.consumer_key = credentials[:consumer_key]
    config.consumer_secret = credentials[:consumer_secret]
    config.access_token = credentials[:access_token]
    config.access_token_secret = credentials[:access_token_secret]
    config.user_agent = "TwitterRubyGem/6.2.0"
  end
end

全跟踪:

| 2019-07-23T16:53:21.793Z 64165 TID-oxprcg2np WARN: NoMethodError: undefined method `each_byte' for nil:NilClass
 | 2019-07-23T16:53:21.793Z 64165 TID-oxprcg2np WARN: /Users/DekaKisaLove/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/uri/rfc2396_parser.rb:308:in `block in escape'
 | /Users/DekaKisaLove/.rvm/gems/ruby-2.6.1@closedwon/gems/activesupport-5.2.3/lib/active_support/core_ext/string/output_safety.rb:230:in `gsub'
 | /Users/DekaKisaLove/.rvm/gems/ruby-2.6.1@closedwon/gems/activesupport-5.2.3/lib/active_support/core_ext/string/output_safety.rb:230:in `gsub'
 | /Users/DekaKisaLove/.rvm/rubies/ruby-2.6.1/lib/ruby/2.6.0/uri/rfc2396_parser.rb:305:in `escape'
 | /Users/DekaKisaLove/.rvm/gems/ruby-2.6.1@closedwon/gems/simple_oauth-0.3.1/lib/simple_oauth/header.rb:32:in `escape'
 | /Users/DekaKisaLove/.rvm/gems/ruby-2.6.1@closedwon/gems/simple_oauth-0.3.1/lib/simple_oauth/header.rb:114:in `block (2 levels) in normalized_params'
 | /Users/DekaKisaLove/.rvm/gems/ruby-2.6.1@closedwon/gems/simple_oauth-0.3.1/lib/simple_oauth/header.rb:114:in `collect'
 | /Users/DekaKisaLove/.rvm/gems/ruby-2.6.1@closedwon/gems/simple_oauth-0.3.1/lib/simple_oauth/header.rb:114:in `block in normalized_params'
 | /Users/DekaKisaLove/.rvm/gems/ruby-2.6.1@closedwon/gems/simple_oauth-0.3.1/lib/simple_oauth/header.rb:114:in `collect'
 | /Users/DekaKisaLove/.rvm/gems/ruby-2.6.1@closedwon/gems/simple_oauth-0.3.1/lib/simple_oauth/header.rb:114:in `normalized_params'
 | /Users/DekaKisaLove/.rvm/gems/ruby-2.6.1@closedwon/gems/simple_oauth-0.3.1/lib/simple_oauth/header.rb:110:in `signature_base'
 | /Users/DekaKisaLove/.rvm/gems/ruby-2.6.1@closedwon/gems/simple_oauth-0.3.1/lib/simple_oauth/header.rb:101:in `hmac_sha1_signature'
 | /Users/DekaKisaLove/.rvm/gems/ruby-2.6.1@closedwon/gems/simple_oauth-0.3.1/lib/simple_oauth/header.rb:97:in `signature'
 | /Users/DekaKisaLove/.rvm/gems/ruby-2.6.1@closedwon/gems/simple_oauth-0.3.1/lib/simple_oauth/header.rb:77:in `signed_attributes'
 | /Users/DekaKisaLove/.rvm/gems/ruby-2.6.1@closedwon/gems/simple_oauth-0.3.1/lib/simple_oauth/header.rb:83:in `normalized_attributes'
 | /Users/DekaKisaLove/.rvm/gems/ruby-2.6.1@closedwon/gems/simple_oauth-0.3.1/lib/simple_oauth/header.rb:65:in `to_s'
 | /Users/DekaKisaLove/.rvm/gems/ruby-2.6.1@closedwon/gems/twitter-6.2.0/lib/twitter/headers.rb:39:in `auth_header'
 | /Users/DekaKisaLove/.rvm/gems/ruby-2.6.1@closedwon/gems/twitter-6.2.0/lib/twitter/headers.rb:30:in `request_headers'
 | /Users/DekaKisaLove/.rvm/gems/ruby-2.6.1@closedwon/gems/twitter-6.2.0/lib/twitter/rest/request.rb:62:in `set_multipart_options!'
 | /Users/DekaKisaLove/.rvm/gems/ruby-2.6.1@closedwon/gems/twitter-6.2.0/lib/twitter/rest/request.rb:28:in `initialize'
 | /Users/DekaKisaLove/.rvm/gems/ruby-2.6.1@closedwon/gems/twitter-6.2.0/lib/twitter/rest/utils.rb:50:in `new'
 | /Users/DekaKisaLove/.rvm/gems/ruby-2.6.1@closedwon/gems/twitter-6.2.0/lib/twitter/rest/utils.rb:50:in `perform_request'
 | /Users/DekaKisaLove/.rvm/gems/ruby-2.6.1@closedwon/gems/twitter-6.2.0/lib/twitter/rest/utils.rb:72:in `perform_request_with_object'
 | /Users/DekaKisaLove/.rvm/gems/ruby-2.6.1@closedwon/gems/twitter-6.2.0/lib/twitter/rest/utils.rb:64:in `perform_post_with_object'
 | /Users/DekaKisaLove/.rvm/gems/ruby-2.6.1@closedwon/gems/twitter-6.2.0/lib/twitter/rest/tweets.rb:155:in `update!'
 | /Users/DekaKisaLove/.rvm/gems/ruby-2.6.1@closedwon/gems/twitter-6.2.0/lib/twitter/rest/tweets.rb:126:in `update'

rfc2396_parser.rb:308

  def escape(str, unsafe = @regexp[:UNSAFE])
  unless unsafe.kind_of?(Regexp)
    # perhaps unsafe is String object
    unsafe = Regexp.new("[#{Regexp.quote(unsafe)}]", false)
  end
  str.gsub(unsafe) do
    us = $&
    tmp = ''
    us.each_byte do |uc|
      tmp << sprintf('%%%02X', uc)
    end
    tmp
  end.force_encoding(Encoding::US_ASCII)
end

标签: ruby-on-railsrubytwitterruby-on-rails-5

解决方案


非常抱歉,问题出在 tweet_text 中 - 它不能有特殊符号。我希望有一天这对某人有所帮助……我花了 4 个小时。


推荐阅读