2011-11-24 54 views
2

我在rails应用程序中使用couchdbcouchrest。当我尝试使用futon时,它会显示一个消息框,提示bad_utf8_character_code。如果我尝试使用Model.all访问rails控制台中的记录,它会引发500:internal server error, RestClient::ServerBrokeConnection: Server broke connection:Errno::ECONNREFUSED: Connection refused - connect(2) 任何人都可以帮助我排序此问题吗?Couchdb bad_utf8_character_code

回答

0

我遇到了这个问题。我尝试了各种curl调用来删除,修改,甚至只是查看违规文档。他们都没有工作。最后,我决定将文档一次一份地拖到本地机器上,跳过“坏”的文档,然后从本地复制到生产。

  • 禁用应用程序(所以没有更多的记录被写入DB)

  • 删除并重新创建本地数据库(运行在一个shell这些命令):

    curl -X DELETE http://127.0.0.1:5984/mydb 
    curl -X PUT http://127.0.0.1:5984/mydb 
    
  • 拉下文件从live到local使用这个ruby脚本

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" 
    
  • 重新启动应用程序