【问题标题】:Ruby Twitter gem: undefined method `each_byte' for nil:NilClass on twitter_client.updateRuby Twitter gem:twitter_client.update 上 nil:NilClass 的未定义方法“each_byte”
【发布时间】:2019-12-01 19:13:13
【问题描述】:

我对 gem 有一个奇怪的问题。它在 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

full_trace:

| 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

【问题讨论】:

  • 这里没有提到each_byte,所以你可能需要进一步挖掘。
  • @tadman 这是唯一的参考 =( 每个字节的日志中的 cmd+f 仅出现在错误消息中
  • 它在 rfc2396_parser.rb 文件的第 308 行。
  • @tadman 添加到问题

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 2016-06-15
    • 2013-03-04
    • 2013-02-17
    • 2014-03-16
    • 2012-10-08
    相关资源
    最近更新 更多