2011-11-24 4 views
2

J'utilise couchdb à couchrest dans une application de rubis sur rails. Quand j'essaye d'employer futon il alerte avec une boîte de message disant bad_utf8_character_code. Si j'essaie d'accéder aux dossiers de la console des rails en utilisant Model.all il soulève l'un des 500:internal server error, RestClient::ServerBrokeConnection: Server broke connection: ou Errno::ECONNREFUSED: Connection refused - connect(2) Quelqu'un peut-il m'aider à trier ce problème?Couchdb bad_utf8_character_code

Répondre

0

J'ai rencontré ce problème. J'ai essayé plusieurs appels curl pour supprimer, modifier et même afficher le document incriminé. Aucun d'entre eux n'a travaillé. Finalement, j'ai décidé d'envoyer les documents à mon ordinateur local un à la fois, d'ignorer le "mauvais", et ensuite de passer de mon local à la production.

  • app Désactiver (donc pas plus d'enregistrements sont écrits dans la db)

  • Supprimer et recréer la base de données locale (exécuter ces commandes dans un shell):

    curl -X DELETE http://127.0.0.1:5984/mydb 
    curl -X PUT http://127.0.0.1:5984/mydb 
    
  • Déroulez documents de direct à local en utilisant ce script rubis

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 
  • Destroy (supprimer) et de recréer la base de données de production (je l'ai fait dans futon)

  • Répliquer

    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" 
    
  • Restart app