2010-10-02 7 views
2

J'ai quelques problèmes en effectuant un db: tirer d'heroku à mon environnement de développement local. Mon installation est MySQL (5.1.50) d'une installation de MacPorts sur un environnement Rails 3/Ruby 1.9.2 local sous Mac OS X Snow Leopard via RVM, et j'ai exécuté avec succès un heroku db:push sur le site de production Heroku plusieurs fois. Cependant, sur une machine de développement secondaire avec la même configuration, quand je tente de tirer le Heroku DB retour via heroku db:pull, je reçois l'erreur suivante, après le téléchargement les informations de la table et l'index pour un court moment:DB tirer de heroku échoue avec Encoding :: CompatibilityError

/Users/jschuur/.rvm/gems/ruby-1.9.2-p0/gems/sequel-3.15.0/lib/sequel/adapters/shared/mysql.rb:399:in `join': incompatible character encodings: UTF-8 and ASCII-8BIT (Encoding::CompatibilityError) 
    from /Users/jschuur/.rvm/gems/ruby-1.9.2-p0/gems/sequel-3.15.0/lib/sequel/adapters/shared/mysql.rb:399:in `multi_insert_sql' 

Voici les gemmes pertinentes:

ruby-mysql (2.9.3) 
sequel (3.15.0) 
mysql2 (0.2.4) 
taps (0.3.13) 
heroku (1.10.6, 1.10.5, 1.10.0) 

liste complète des erreurs et petit bijou here.

La même erreur se produit sur ma machine de production primaire BTW (celle où j'ai fait la forme db: push to heroku).

Maintenant, je comprends que c'est fondamentalement une erreur de codage UTF8. FWIW, mon database.yml fait explicitement référence UTF8:

development: 
    adapter: mysql2 
    encoding: utf8 
    database: rails_dev_dbname 
    pool: 5 
    username: rails 
    socket: /tmp/mysql.sock 

Maintenant intéressant, si je crée un DB presque vide avec une seule entrée de test en elle, je peux pousser/tirer très bien. Donc évidemment quelque chose dans mon ensemble de données de non UTF8. Même s'il n'y a pas encore beaucoup de données, il est tout à fait possible que j'aie copié du texte contenant une citation funky ou un symbole de copyright sur lequel il s'étoufferait.

Donc, la question est, comment puis-je contourner ce problème? Les documents Heroku mentionnent appending '?encoding=utf' à votre URL de base de données lorsque vous faites un push, mais je suppose que mon heroku db:push par défaut qui a envoyé les données à Heroku en premier lieu utilisé database.yml, qui a déjà cet ensemble. De toute façon, j'ai fait une poussée explicite de cette façon, et une traction subséquente a toujours le même problème.

Répondre

2

Je passe ma version rubis à 1.8.7 lorsque j'utilise des taps pour pousser et tirer quand j'obtiens des erreurs, donc vous pouvez essayer.

Si vous n'utilisez pas ce déjà utiliser RVM pour gérer vos versions de rubis

+0

Huh. Cela a fait l'affaire, mais pourquoi? Pourrait avoir été quelques nouveaux défauts dans 1.9 qui étaient en conflit avec les hypothèses de gemmes robinets. Merci pour la réponse rapide. –

+0

ouais, c'est ma conjecture aussi. – s84