6 votes

Problème avec Rails 3 et MySQL lié à la dépendance JSON dans ActiveSupport

J'ai construit mon application Rails 3 en utilisant sqlite et j'essaie maintenant de passer à MySQL.

J'ai créé un nouveau db MySQL, modifié database.yml en conséquence, et j'ai ajouté une ancienne version de la gemme mysql2 à mon gemfile ( gem 'mysql2', '< 0.3' ) qui est censé jouer plus gentiment avec Rails 3 .

Je peux démarrer le serveur de développement sans problème. Lorsque je visite une page, j'obtiens un Mysql2::Error ( Table 'twitter_quiz_development.users' doesn't exist ). Ce qui est bien - je dois encore ajouter le schéma au nouveau fichier de données. C'est là que je rencontre des difficultés :

rake db:schema:load renvoie à cette méchante erreur .

La solution trouvée aquí n'a pas fonctionné pour moi. gem pristine --all retourner ce .

J'utilise Ubuntu 11 si cela peut aider.

Il semble que l'erreur soit liée à JSON, mais je n'ai aucune idée de la façon de résoudre ce problème. Merci.

1voto

nfm Points 5269

Votre gem pristine --all on dirait qu'il s'est trompé avec le SystemTimer avant qu'il n'atteigne le json pierre précieuse. Cette gemme est-elle utilisée dans l'application Rails en question ?

Utilisez-vous RVM ? Si oui, je supprimerais manuellement le SystemTimer y json gems et leurs binaires (s'il y en a) à partir de ~/.rvm/gems/ruby-whatever-version/ (dans le gem y bin sous-répertoires).

Essayez de mettre à jour la dernière version du JSON gem (1.5.1) en l'ajoutant à votre Gemfile :

gem "json", "1.5.1"

Et puis lancez bundle install pour installer SystemTimer et la version ultérieure de la json gemme.

1voto

Jits Points 5595

Le ou les problèmes que vous rencontrez peuvent être dus à 3 choses :

  • La version de Ruby que vous utilisez
  • L'utilisation de la gemme SystemTimer avec Ruby 1.9
  • La gemme JSON

Je l'ai développé ci-dessous...

La première chose que je vous suggère est de mettre à jour votre version de Ruby 1.9. La dernière version stable est la suivante :

ruby 1.9.2p180 (2011-02-18 revision 30909)

Je recommande vivement d'utiliser Gestionnaire de versions de Ruby (RVM) pour installer et gérer Rubies.

Pour ce qui est de l'utilisation de la gemme JSON, jetez un coup d'œil à : http://ruby.about.com/od/tasks/a/The-Json-Gem.htm

Je cite :

Sous Ruby 1.8.7, vous devrez installer une gemme. Cependant, en Ruby 1.9.2, la gemme json est fournie avec la distribution de base de Ruby. Donc, si vous utilisez la version 1.9.2, vous êtes probablement prêt. Si vous êtes sous la version 1.8.7, vous devrez installer une gemme.

Avant d'installer la gemme JSON, sachez d'abord que cette gemme est distribuée en deux variantes. En installant simplement cette gemme avec gem install json, vous installerez la variante de l'extension C. Celle-ci nécessite un compilateur C pour être installée, et peut ne pas être disponible ou appropriée sur tous les systèmes. Cependant, si vous pouvez installer cette version, vous devriez le faire.

Si vous ne pouvez pas installer la version de l'extension C, vous devriez installer gem json_pure à la place. C'est la même gemme implémentée en Ruby pur. Elle devrait fonctionner partout où le code Ruby s'exécute, sur toutes les plates-formes et sur une variété d'interpréteurs. Cependant, elle est considérablement plus lente que la version avec extension C.

Modifier :

On dirait que vous devriez éviter d'utiliser le SystemTimer avec Ruby 1.9. Voir ceci pour plus d'informations : http://isitruby19.com/systemtimer

Pour citer un commentaire fait sur cette page par Phillipe :

Je suis le (co)-auteur de ce bijou. En bref : L'utilisation de cette gemme dans Ruby 1.9 est inutile et n'a aucun sens !

System Timer essaie de contourner certaines limitations du modèle "green thread" utilisé dans Ruby 1.8 (MRI). Voir http://ph7spot.com/musings/system-timer pour plus de détails.

Il est alors non pertinent dans un Ruby 1.9 qui a abandonné le modèle de thread vert et a adopté les threads natifs (en quelque sorte puisqu'il y a toujours un verrou global de l'interpréteur).

A la vôtre, - Philippe

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X