【发布时间】: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