SyntaxError가 rails 3.0.2/ruby 1.9.2p180을 사용하여 JSON을 처리하는 중 오류 발생

6450 단어 crack
4

묘사

저는 httparty/crack의rbing을 사용했는데 해석 오류가 발생했습니다.
SyntaxError: 첫 번째 행 598 열에서 YAML을 분석할 수 없습니다.
/usr/local/ceral/ruby/1.9.2-p180/lib/ruby/gems/1.9.1/gems/crack-0.1.8/lib/crack/json.rb:12:inparse' /usr/local/Cellar/ruby/1.9.2-p180/lib/ruby/gems/1.9.1/gems/httparty-0.6.1/lib/httparty/parser.rb:116:injson'
/usr/local/ceral/ruby/1.9.2-p180/lib/ruby/gems/1.9.1/gems/httparty-0.6.1/lib/httparty/parser.rb:136:parse -supported 형식
...
/usr/local/Cellar/ruby/1.9.2-p180/lib/ruby/gems/1.9.1/gems/rbing-1.1.0/lib/rbing.rb:113:in `search'

토론 #1

나는 이 문제를 실증할 수 있다.
다음은 해당 세션을 재현하는 방법입니다.
Loading development environment (Rails 3.0.7)
ruby-1.9.2-p180 :004 > require 'crack'
ruby-1.9.2-p180 :002 > url = 'http://picasaweb.google.com/data/feed/base/user/phoet6/?alt=json'
ruby-1.9.2-p180 :001 > HTTPClient.get(url).content
ruby-1.9.2-p180 :003 > resp = HTTPClient.get(url).content
ruby-1.9.2-p180 :005 > resp = Crack::JSON.parse(resp)
Psych::SyntaxError: couldn't parse YAML at line 1 column 395
    from /Users/peterschroder/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/psych.rb:148:in `parse'
    from /Users/peterschroder/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/psych.rb:148:in `parse_stream'
    from /Users/peterschroder/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/psych.rb:119:in `parse'
    from /Users/peterschroder/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/psych.rb:106:in `load'
    from /Users/peterschroder/.rvm/gems/ruby-1.9.2-p180@basement/gems/crack-0.1.8/lib/crack/json.rb:12:in `parse'
    from (irb):5
    from /Users/peterschroder/.rvm/gems/ruby-1.9.2-p180@basement/gems/railties-3.0.7/lib/rails/commands/console.rb:44:in `start'
    from /Users/peterschroder/.rvm/gems/ruby-1.9.2-p180@basement/gems/railties-3.0.7/lib/rails/commands/console.rb:8:in `start'
    from /Users/peterschroder/.rvm/gems/ruby-1.9.2-p180@basement/gems/railties-3.0.7/lib/rails/commands.rb:23:in `<top (required)>'
    from script/rails:10:in `require'
    from script/rails:10:in `<main>'

토론 #2

나는 두 번째 기계에서 이 문제를 재현하는 데 약간의 시간을 썼다.처음에 나는 최신 iMac에 문제가 있을 수 있다고 생각했지만, 나도 나의 맥북에서 그것을 복제할 수 있다.
다음은 내가 한 일이다.
$ rvm get head
$ rvm install 1.9.2
ruby-1.9.2-p180@basement:

  system:
    uname:       "Darwin ernst.local 10.7.1 Darwin Kernel Version 10.7.1: Thu Jan 27 18:47:00 PST 2011; root:xnu-1504.10.48~2/RELEASE_X86_64 x86_64"
    bash:        "/bin/bash => GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin10.0)"
    zsh:         "/bin/zsh => zsh 4.3.9 (i386-apple-darwin10.0)"

  rvm:
    version:      "rvm 1.6.18 by Wayne E. Seguin ([email protected]) [https://rvm.beginrescueend.com/]"

  ruby:
    interpreter:  "ruby"
    version:      "1.9.2p180"
    date:         "2011-02-18"
    platform:     "x86_64-darwin10.7.1"
    patchlevel:   "2011-02-18 revision 30909"
    full_version: "ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-darwin10.7.1]"

  homes:
    gem:          "/Users/peterschroder/.rvm/gems/ruby-1.9.2-p180@basement"
    ruby:         "/Users/peterschroder/.rvm/rubies/ruby-1.9.2-p180"

  binaries:
    ruby:         "/Users/peterschroder/.rvm/rubies/ruby-1.9.2-p180/bin/ruby"
    irb:          "/Users/peterschroder/.rvm/rubies/ruby-1.9.2-p180/bin/irb"
    gem:          "/Users/peterschroder/.rvm/rubies/ruby-1.9.2-p180/bin/gem"
    rake:         "/Users/peterschroder/.rvm/gems/ruby-1.9.2-p180@global/bin/rake"

  environment:
    PATH:         "/Users/peterschroder/.rvm/gems/ruby-1.9.2-p180@basement/bin:/Users/peterschroder/.rvm/gems/ruby-1.9.2-p180@global/bin:/Users/peterschroder/.rvm/rubies/ruby-1.9.2-p180/bin:/Users/peterschroder/.rvm/bin:/Users/peterschroder/Library/android:/Users/peterschroder/.script:/Users/peterschroder/Library/grails/bin:/Users/peterschroder/Library/groovy/bin:/Users/peterschroder/.gem/ruby/1.8/bin:/Users/peterschroder/Library/maven/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11/bin:/opt/nginx/sbin"
    GEM_HOME:     "/Users/peterschroder/.rvm/gems/ruby-1.9.2-p180@basement"
    GEM_PATH:     "/Users/peterschroder/.rvm/gems/ruby-1.9.2-p180@basement:/Users/peterschroder/.rvm/gems/ruby-1.9.2-p180@global"
    MY_RUBY_HOME: "/Users/peterschroder/.rvm/rubies/ruby-1.9.2-p180"
    IRBRC:        "/Users/peterschroder/.rvm/rubies/ruby-1.9.2-p180/.irbrc"
    RUBYOPT:      "rubygems"
    gemset:       "basement"

$ bundle --version
Bundler version 1.0.14

$ rails -v
Rails 3.0.7
RVM은 1.9.2를 설치하는 동안 YAML 라이브러리를 사용하기 때문에 다음과 관련이 있을 수 있습니다.
--no-same-owner
Configuring yaml in /Users/peterschroder/.rvm/src/yaml-0.1.3.
Compiling yaml in /Users/peterschroder/.rvm/src/yaml-0.1.3.
Installing yaml to /Users/peterschroder/.rvm/usr

토론 #셋

나는 rvm 설치를 삭제하고 구/랜덤 버전으로 바꾸는 상당히 급진적인 방법을 시도했지만 성공했다.
paule@phoet:~○$ rm -rf .rvm
paule@phoet:~○$ curl -s https://rvm.beginrescueend.com/install/rvm -o rvm-installer ; chmod +x rvm-installer ; ./rvm-installer --version 1.6.2

토론 #4

나는 rvm나 균열의 복구 방법을 모르지만, 이것은 나에게 매우 효과적이다.
require 'httparty'
requre 'json'
response = HTTParty.get("http://someurl.com", :format => :plain)
JSON.parse(response.body)
Crack의 구현은 사실상 무시됩니다.이상적이지는 않지만, 나의 용례에 있어서는 매우 좋다.가입
YAML::ENGINE.yamler = "syck"
내 서류 꼭대기에서 이걸 고쳐줬어.그것은 사실상 정신병과 정신병 문제와 관련이 있다.이들은 같은 JSON 해석 행위가 없고 창고에서 똑같은 오류를 던지지 않는다.예를 들어 HTML을 전송하고 JSON을 해석하는 것처럼 해석을 요구하면, syck 해독을 통해 syck의 오류를 포착하여 Crack::ParseError에 포장하고, psych 해독을 통해 psych::Syntax Error가 통과할 수 있도록 합니다.
Syntax error 유형은 Standard Error가 아닌 Syntax Error에서 상속되므로 vanilla rescue 문장과 유사한 문장은 PsychError를 포착하지 않으며,syck에서 온 유사한 오류 조건을 포착할 수 있습니다. 포장이 다르기 때문입니다.
PsychError에 대한 자세한 내용은 다음 질문을 참조하십시오.https://github.com/tenderlove/psych/issues/23

토론 #5

+1-@SACSE.나는 그것을 config/initializers/httparty에 놓았다.난 괜찮아.감사합니다.너는 나를 매우 즐겁게 한다

토론 #6

누군가가 해결 방안을 제시했기 때문에 폐쇄되었다.

좋은 웹페이지 즐겨찾기