2011-11-24 1 views
2

ruby ​​on rails 응용 프로그램에서 couchdb에서 couchrest까지 사용하고 있습니다. futon을 사용하려고하면 bad_utf8_character_code이라는 메시지 상자가 나타납니다. Model.all을 사용하여 레일 콘솔에서 레코드에 액세스하려고 시도하면 500:internal server error, RestClient::ServerBrokeConnection: Server broke connection: 또는 Errno::ECONNREFUSED: Connection refused - connect(2) 중 하나가 발생합니다.이 문제를 해결하는 데 도움을 줄 수 있습니까?Couchdb bad_utf8_character_code

답변

0

이 문제가 발생했습니다. 나는 다양한 컬 (curl) 콜을 시도하여 문제를 지우거나 수정하고 심지어는 그저보기 만했다. 그들 중 누구도 일하지 않았습니다. 마지막으로 한 번에 하나씩 내 로컬 컴퓨터로 문서를 가져 와서 "나쁜"문서를 건너 뛰고 내 로컬에서 프로덕션으로 복제하기로 결정했습니다.

  • 해제 응용 프로그램 (그래서 더 이상 레코드가 DB에 기록되지되는)

  • 삭제하고 (쉘에서이 명령 실행) 로컬 데이터베이스를 다시 :

    curl -X DELETE http://127.0.0.1:5984/mydb 
    curl -X PUT http://127.0.0.1:5984/mydb 
    
  • 를 아래로 당겨 이 루비 스크립트를 사용하여 라이브에서 로컬로 문서

require 'bundler' 
require 'json' 

all_docs = JSON.parse(`curl http://server.com:5984/mydb/_all_docs`) 
docs = all_docs['rows'] 
ids = docs.map{|doc| doc['id']} 
bad_ids = ['196ee4a2649b966b13c97672e8863c49'] 

good_ids = ids - bad_ids 

good_ids.each do |curr_id| 
    curr_doc = JSON.parse(`curl http://server.com:5984/mydb/#{curr_id}`) 
    curr_doc.delete('_id') 
    curr_doc.delete('_rev') 
    data = curr_doc.to_json.gsub("\\'", "\'").gsub('"','\"') 
    cmd = %Q~curl -X PUT http://127.0.0.1:5984/mydb/#{curr_id} -d "#{data}"~ 
    puts cmd 
    `#{cmd}` 
end 
  • (나는 이불에서 이런 짓을)

  • 복제를 파괴 (삭제) 및 생산 데이터베이스를 다시

    curl -X POST http://127.0.0.1:5984/_replicate -d '{"target":"http://server.com:5984/mydb", "source":"http://127.0.0.1:5984/mydb"}' -H "Content-Type: application/json" 
    
  • 다시 시작 응용 프로그램