web-dev-qa-db-fra.com

Rails, MySQL et Snow Leopard

Je suis passé à Snow Leopard avec le disque que nous avons obtenu à WWDC.

Essayer de lancer certaines de mes applications Rails se plaint maintenant de SQL

    (in /Users/coneybeare/Projects/Ambiance/ambiance-server)
!!! The bundled mysql.rb driver has been removed from Rails 2.2. Please install the mysql gem and try again: gem install mysql.
Importing all sounds in /Users/coneybeare/Projects/Ambiance/ambiance-sounds/Import 32/Compressed/

 -- AdirondackPeepers.caf
!!! The bundled mysql.rb driver has been removed from Rails 2.2. Please install the mysql gem and try again: gem install mysql.
rake aborted!
dlopen(/opt/local/lib/Ruby/gems/1.8/gems/mysql-2.7/lib/mysql.bundle, 9): Library not loaded: /usr/local/mysql/lib/libmysqlclient.16.dylib
  Referenced from: /opt/local/lib/Ruby/gems/1.8/gems/mysql-2.7/lib/mysql.bundle
  Reason: image not found - /opt/local/lib/Ruby/gems/1.8/gems/mysql-2.7/lib/mysql.bundle

(See full trace by running task with --trace)

J'aurais pu jurer que j'avais déjà réglé ça une fois. Le problème est que

Sudo gem install mysql

ne fonctionne pas et donne l'erreur:

 Building native extensions.  This could take a while...
ERROR:  Error installing mysql:
    ERROR: Failed to build gem native extension.

/opt/local/bin/Ruby extconf.rb install mysql
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lm... yes
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lz... yes
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lsocket... no
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lnsl... no
checking for mysql_query() in -lmysqlclient... no


Gem files will remain installed in /opt/local/lib/Ruby/gems/1.8/gems/mysql-2.7 for inspection.
Results logged to /opt/local/lib/Ruby/gems/1.8/gems/mysql-2.7/gem_make.out

Mysql a-t-il déjà utilisé Rails sur Snow Leopard? Si oui, quelle est votre configuration et, mieux encore, que puis-je faire pour la reproduire?

67
coneybeare

Je viens de vivre la même douleur ... voici ce qui a fonctionné pour moi:

  1. Téléchargez/installez le MySQL 5.1.37 64 bits à partir de mysql.com
  2. lancez les commandes suivantes:

 Sudo gem update --system 

 Sudo env ARCHFLAGS = "- Arch x86_64" Gem installer mysql - --with-mysql-config =/usr/local/mysql/bin/mysql_config.

J'ai également désinstallé toutes les gemmes mysql qui flottaient depuis mes 10,5 jours, cela peut le faire si ce qui précède ne fonctionne pas pour vous :)

108
Ian Selby

Reconstruire mysql en 64 bits ou installer la version 64 bits est important, mais vous devez également vous assurer de construire les parties natives de la gem mysql en 64 bits également (cela ne s'applique pas si vous utilisez l'un des macs Intel Core Duo d'origine ).

Voici la commande magique:

env ARCHFLAGS="-Arch x86_64" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config

Vous devez configurer les ARCHFLAGS comme indiqué ci-dessus chaque fois que vous effectuez une installation Gem avec des composants natifs sur Snow Leopard.

10
Shebanator

Si vous utilisez bundler, vous pouvez utiliser "bundle config" pour définir les arguments de construction appropriés pour mysql, comme ceci:

bundle config build.mysql --with-mysql-config=/usr/local/mysql/bin/mysql_config
7
Steven Soroka

Je me suis battu avec ça pendant longtemps et finalement je l'ai fait travailler sur Snow Leopard. J'ai fini par installer Ruby, RubyGems et MySQL à partir des sources (voir le tutoriel Hivelogic pour installer Ruby et RubyGems. Le tutoriel MySQL est lié en bas). J'ai enfin réussi à installer la gemme, mais je continuais à obtenir

dyld: lazy symbol binding failed: Symbol not found: _mysql_init
  Referenced from: /Library/Ruby/Site/1.8/universal-darwin10.0/mysql.bundle
  Expected in: flat namespace

dyld: Symbol not found: _mysql_init
  Referenced from: /Library/Ruby/Site/1.8/universal-darwin10.0/mysql.bundle
  Expected in: flat namespace

Trace/BPT trap

J'ai finalement supprimé le mysql.bundle (je ne sais pas du tout à quoi cela sert) et tout a fonctionné.

Sudo rm -f /Library/Ruby/Site/1.8/universal-darwin10.0/mysql.bundle

J'espère que ça aide quelqu'un.

6
Sam Soffes

J'ai vu ce problème plusieurs fois. presque chaque fois que je construis mysql sur une machine. Je pense que vous devez passer votre mysqlconfig dans le cadre de la commande gem install.

Sudo gem install mysql -- --with-mysql-config=/your/mysql/config

Provided configuration options:
--with-opt-dir
--without-opt-dir
--with-opt-include
--without-opt-include=${opt-dir}/include
--with-opt-lib
--without-opt-lib=${opt-dir}/lib
--with-make-prog
--without-make-prog
--srcdir=.
--curdir
--Ruby=/usr/bin/Ruby
--with-mysql-config

N'oubliez pas que vous avez besoin des fichiers de développement mysql pour pouvoir construire ce joyau.

4
Ryan Oberoi

J'avais des problèmes pour faire fonctionner ma configuration après l'installation de Snow Leopard. J'ai trouvé MAMP sur http://www.mamp.info et il regroupe Apache, PHP et MySQL. vous l'installez comme une application et cela fonctionne. Cela vaut peut-être la peine d'essayer, et c'est gratuit.

engrener

2
mesh

Après une pause de Rails depuis plusieurs années, je viens de passer un peu de temps à configurer mon environnement de développement. J'ai donc pensé créer un tutoriel sur la manière d'installer la dernière version de Rails 3, MySQL et RVM sur SnowLeopard, afin de gagner un peu de temps aux personnes occupant mon poste.

Il fonctionne à partir du 21 août 2011 avec Rails 3.0.10, MySQL 5.5.15 et RVM 1.7.2. Il devrait fonctionner avec les futures versions de Rails 3.0.x, MySQL 5.5.x et RVM 1.7.x.

  1. Installez XCode s'il n'est pas déjà installé. J'ai utilisé 4.0.2. Malheureusement, cela a maintenant été retiré par Apple, mais pourrait être disponible ailleurs sur Internet. La version 3.2.x est téléchargeable gratuitement chez Apple, mais je ne l’ai pas testée avec ce tutoriel, elle fonctionne probablement aussi. 

  2. Installez rvm :

    user$ bash < <(curl -s https://rvm.beginrescueend.com/install/rvm)
    
    user$ echo '[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # Load RVM function' >> ~/.bash_profile
    
    user$ source .bash_profile
    
  3. Installez une version de Ruby (par exemple, 1.9.2) dans rvm, les instructions d'utilisation de base sont ici .

    user$ rvm install 1.9.2
    user$ rvm use 1.9.2
    
  4. Créez un gemset pour la rvm Ruby installée à l’étape 2 (x est le numéro de version).

    user$ rvm gemset create Rails30x
    user$ rvm 1.9.2@Rails30x
    
  5. Installez Rails 3.0.x (x est le numéro de version).

    user$  gem install Rails -v 3.0.x.
    
  6. Téléchargez et installez le paquet MySQL 5.5.x, l’élément de démarrage et le volet des préférences . Ces 3 éléments sont inclus dans le fichier d’installation de DMG. Installez également MySQL WorkBench.

    Recherchez/usr/local/mysql-nom-version/support-files (en insérant le nom de répertoire MySQL correct) et modifiez mysql.server (avec les privilèges root). Autour de la ligne 46, localisez les lignes suivantes:

    basedir=
    datadir=
    

    et les changer en lecture (en insérant le nom de répertoire MySQL correct):

    basedir=/usr/local/mysql-version-name
    datadir=/usr/local/mysql-version-name/data
    

    Enregistrez le fichier. MySQL peut maintenant être lancé à partir du panneau de préférences.

    Pour permettre à Rails 3 d’utiliser mysql, installez la gem mysql2 (voir l’étape suivante). Tout d’abord, vous devez configurer le DYLD_LIBRARY_PATH pour inclure le répertoire de la bibliothèque MySQL. Pour ce faire, éditez votre fichier ~/.bash_profile dans votre dossier Et incluez les éléments suivants (en insérant le nom de répertoire MySQL correct):

    export DYLD_LIBRARY_PATH=/usr/local/mysql-version-name/lib:$DYLD_LIBRARY_PATH
    

    Sans l'inclusion du répertoire dans DYLD_LIBRARY_PATH, un message indiquant de ne pas trouver la bibliothèque .__ apparaîtra et que le serveur abandonnera.

  7. Installez le mysql2 gem. (à partir de mai 2011, la version 0.2.7 est la version de travail la plus récente avec Rails 3.0.x).

    user$ gem install mysql2 -v 0.2.7 
    
  8. Créez une application Rails et la base de données correspondante (appname_development).

    user$ Rails new appname
    
  9. Ajoutez ceci au fichier Gemfile de l'application: gem 'mysql2', "0.2.7"

  10. Ajoutez ceci à la base de données de l'application.yml:

    development: 
      adapter: mysql2
      encoding: utf8
      reconnect: false
      database: appname_development
      pool: 5
      username: username
      password: pwd
      Host: localhost
    
  11. lancez l'application et cochez la case "À propos de l'environnement de votre application". Tout devrait fonctionner correctement.

1
MikeD

Les instructions pour configurer ARCHFLAGS et passer --mysql-config = ... n'ont pas semblé suffire à résoudre ce problème pour moi sur Snow Leopard. En plus de cela, j'ai ajouté:

DYLD_LIBRARY_PATH="/usr/local/mysql/lib:$DYLD_LIBRARY_PATH"

à mon profil bash, et cela l'a résolu pour moi.

1
bratsche

J'ai eu le même problème et voici ce qui a fonctionné pour moi.

  1. Installez Snow Leopard et le MySQL DMG 64 bits.

  2. Créez /etc/my.cnf pour pointer vers mon précédent répertoire de données MySQL (comme décrit ici ) et exécutez 

    Sudo mysql_upgrade.

  3. Ouvrez IRB et réinstallez toutes mes pierres précieuses en utilisant (via blog.costan.us/2009/07/rebuild-your-Ruby-gems-if-you-update-to.html).

    `gem list`.each_line {| line | système 'Sudo gem install # {line.split.first}'} 

  4. Désinstallez les gemmes MySQL que j'avais installées.

  5. MySQL installé avec 

    Sudo env ARCHFLAGS="-Arch x86_64" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config

Avec cela, tout semble fonctionner jusqu'à présent. * frapper du bois *

1
Aaron H.

J'ai procédé comme expliqué dans cet article ( http://www.schmidp.com/2009/06/14/rubyrails-and-mysql-on-snow-leopard-10a380/ ), et tout fonctionne correctement.

N'oubliez pas de rechercher les fautes de frappe dans sa commande pour installer le pilote mysql.

1
Daniel Drehmer

Je pensais pouvoir répondre à ma propre question ici. Il semble que le problème ne soit pas dans mysql, mais dans les liaisons mysql Ruby. J'ai compris cela parce que quand j'ai connecté Querius (mon mysql gui), il était capable de se connecter.

Voici comment compiler à partir des sources pour corriger les liaisons:

cd /tmp
wget http://www.tmtm.org/en/Ruby/mysql/Ruby-mysql-0.2.6.tar.gz
tar xvfz Ruby-mysql-0.2.6.tar.gz
cd Ruby-mysql-0.2.6
./configure
make
Sudo make install

Il y a beaucoup de bibliothèques que je devrai construire à partir du code source de Snow Leopard et elles continuent à apparaître. MacPorts ne semble pas être suffisamment mis à jour pour toutes les bibliothèques, alors je vais le faire moi-même. Prochaine étape: freetype ( http://download.savannah.gnu.org/releases-noredirect/freetype/ )

1
coneybeare

Je l'ai résolu de cette façon:

  1. après installer le fichier dmg de mysql
  2. bundle config build.mysql --with-mysql-config =/usr/local/mysql/bin // mysql_config
  3. env ARCHFLAGS = "- Arch x86_64"
  4. installation groupée
1
surajit dey

Ian Selby merci beaucoup mais je devais enlever la Sudo devant le Sudo env ARCHFLAGS="-Arch x86_64" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config

J'installais sur un gemset et j'utilise rvm, ce qui, je pense, vous demande de ne pas utiliser le mot clé Sudo. Merci beaucoup.

1
Ricky McMillen

Si vous préférez home brasser , au lieu d’installer MySQL manuellement.

Désinstallez le gem mysql existant (le cas échéant):

 Sudo gem uninstall mysql 

Localisez le fichier ‘mysql_config’:

 find /usr -name 'mysql_config' 

Réinstallez mysql gem:

 Sudo env ARCHFLAGS="-Arch x86_64" gem install mysql -- --with-mysql-config=/usr/local/bin/mysql_config 

Remarque: remplacez /usr/local/bin/ par le chemin mysql_config correspondant trouvé à l'étape 2. Également sur mon blog .

1
ohho

J'ai essayé l'astuce des archflags plusieurs fois avec de légères variations, mais cela n'a jamais fonctionné pour moi.

Ce que finalement a fait, c’était de revenir à la version de Ruby and gem installée avec Snow Leopard.

J'avais construit et installé ma propre version qui a fonctionné pour moi dans tous les domaines sauf celui-ci . Puisque tout le reste semble bien fonctionner, je ne peux m'empêcher de deviner que le plugin mysql contient des hypothèses géniales. Quoi qu'il en soit, tout ce que je fis fut de changer/usr/bin pour être à nouveau le premier sur mon chemin. J'avais installé Ruby dans /usr/local/Ruby-1.8.7 et /usr/local/Ruby-1.9.1 pour pouvoir basculer facilement. Je pensais le mentionner car la solution archflags semble fonctionner pour beaucoup de gens, mais pas tout à fait.

0
Ian

cet article a résolu le problème pour moi :)

http://techliberty.blogspot.com/2009/12/dealing-with-rake-aborted-uninitialized.html

  • Avant le léopard

    Sudo gem install mysql -- --with-mysql-dir=/usr/local/mysql

    • Léopard sur une machine PPC:

      Sudo env ARCHFLAGS="-Arch ppc" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config

    • Leopard sur une machine Intel:

      Sudo env ARCHFLAGS="-Arch i386" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config

    • Snow Leopard (uniquement sur Intel):

      Sudo env ARCHFLAGS="-Arch x86_64" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config

0
Bijan

J'ai renommé le programme mysql_config de $ MYSQL_HOME/bin en quelque chose d'autre, de sorte que le script de configuration du programme d'installation gem ne puisse pas le trouver. Même si j'utilisais l'option libs, le programme d'installation gem utilisait toujours les paramètres de compilation de mon installation mysql, ce qui est fat binaire. Mais l'installation par défaut de Ruby est uniquement x86_64 et par conséquent, la compilation de la gem échoue. Après avoir renommé le programme mysql_config, la commande suivante a très bien fonctionné et a installé la gemme:

Sudo env ARCHFLAGS="-Arch x86_64" gem install mysql -- --with-mysql-dir=/usr/local/mysql
0
cmittendorf

Si vous installez la gem mysql avec RVM, vous devez utiliser le code suivant pour l'installer.

Sudo env ARCHFLAGS="-Arch x86_64" gem install mysql

Cette méthode a fonctionné pour moi dans Leopard Server, aucune des solutions ci-dessus n’a fonctionné.

0
ganar