2011-03-27 9 views
21

Acabo de compilar ruby ​​e instalo rubygems, mysql2 y rieles, que funcionó bastante bien. Pero me sale el mensaje de error siguiente, cada vez que intento iniciar el servidor rieles:Ruby: mysql2-Gem no funciona (Mac OS X Snow Leopard, Ruby 1.9.2)

 
/usr/local/ruby/lib/ruby/gems/1.9.1/gems/mysql2-0.2.6/lib/mysql2.rb:7:in `require': dlopen(/usr/local/ruby/lib/ruby/gems/1.9.1/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle, 9): Library not loaded: libmysqlclient.18.dylib (LoadError) 
    Referenced from: /usr/local/ruby/lib/ruby/gems/1.9.1/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle 
    Reason: image not found - /usr/local/ruby/lib/ruby/gems/1.9.1/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle 
    from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/mysql2-0.2.6/lib/mysql2.rb:7:in `' 
    from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.10/lib/bundler/runtime.rb:68:in `require' 
    from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.10/lib/bundler/runtime.rb:68:in `block (2 levels) in require' 
    from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.10/lib/bundler/runtime.rb:66:in `each' 
    from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.10/lib/bundler/runtime.rb:66:in `block in require' 
    from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.10/lib/bundler/runtime.rb:55:in `each' 
    from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.10/lib/bundler/runtime.rb:55:in `require' 
    from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.10/lib/bundler.rb:120:in `require' 
    from /Users/filzo/Documents/rails/blog/config/application.rb:7:in `' 
    from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/railties-3.0.5/lib/rails/commands.rb:28:in `require' 
    from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/railties-3.0.5/lib/rails/commands.rb:28:in `block in ' 
    from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/railties-3.0.5/lib/rails/commands.rb:27:in `tap' 
    from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/railties-3.0.5/lib/rails/commands.rb:27:in `' 
    from script/rails:6:in `require' 
    from script/rails:6:in `' 

He intentado varias soluciones posibles (por ejemplo esto: http://railsforum.com/viewtopic.php?pid=23125#23125 con libmysqlclient.18.dylib); pero nada funcionó para mí. Espero que puedas ayudarme.

EDIT: Parece que esto esté arreglado el problema para mí:

sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/ruby/lib/ruby/gems/1.9.1/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle 

De todos modos; ¿Es un error en MySQL o en el código ruby?

+0

Tu solución funcionó para mí también. Tuve que cambiar '1.9.1' a '1.8' y mi copia de Ruby fue instalada en la biblioteca raíz, no en la local, pero funcionó. ¡Woot! – ericso

+0

¿Qué versión de MySQL usa? –

Respuesta

12

Si está utilizando RVM (una excelente opción) en Mac OS X - aquí está el comando mágico que finalmente funcionó para mí.

sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /Users/*USERNAME*/.rvm/gems/ruby-1.9.2-p180/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle 

Reemplazar NOMBRE DE USUARIO en la sintaxis adecuada según su configuración actual. Y si tu versión de la gema mysql es diferente, cambia eso también.

+2

Imprime 'install_name_tool: no se puede abrir el archivo: /Users/my_name/.rvm/gems/ruby-1.9.2-p180/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle (No existe ese archivo o directorio) ' – Kir

+0

Obtengo lo mismo – Francois

+0

' install_name_tool' parece ser parte de XCode/herramientas de desarrollador de línea de comandos. Una versión más portátil de este comando es: 'sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib \' bundle show mysql2 \ '/ lib/mysql2/mysql2 .bundle' – iloveitaly

32

Uno de la forma más sencilla y lo mejor es crear un vínculo de software de comandos -

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib 

http://rorguide.blogspot.com/2011/07/getting-error-library-not-loaded.html

+1

Funcionó para mí. Gracias. – RSG

+0

Capitán Fantástico. Después de probar esto, ya no puedo iniciar sesión en mysql. Sigue obteniendo acceso denegado error ... – o01

+0

funcionó muy bien para mí también – pablo

3

tratar de hacer este enlace simbólico, por lo que el rastrillo puede encontrar la correcta lib cliente de MySQL.

ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

2

no estoy seguro de si esto ayuda o no, pero estoy usando OS X 10.7.1 Lion. En mi caso, abrí una ventana de terminal, fui a /Library/Ruby/Gems/1.8/gems/mysql2-0.3.7 y tan pronto como lo hice RVM ladró diciendo que encontró un archivo .rvmrc nuevo o modificado. El contenido de ese archivo fue:

rvm use [email protected] --create 

Se preguntó si quería que confiar en este archivo .rvmc. Le dije que sí, y se devolvió el siguiente:

Using /Users/dan/.rvm/gems/ruby-1.9.2-p290 with gemset mysql2 

Una vez que lo hizo, me encontré con el siguiente comando:

sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /Library/Ruby/Gems/1.8/gems/mysql2-0.3.7/lib/mysql2/mysql2.bundle 

Una vez que lo hacía, se estableció que ir. ¡Espero que esto ayude!

4

Una mejor alternativa a la herramienta install_name es agregar una ruta de acceso a la lib de mysql a su variable de entorno DYLD_LIBRARY_PATH. En/etc/profile:

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib 

O, como tengo el cliente instantáneo de Oracle instalado, así, hacer:

export ORACLE_HOME="/usr/local/oracle/instantclient_10_2" 
export DYLD_LIBRARY_PATH=$ORACLE_HOME 
export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/usr/local/mysql/lib 
14

Esto parece ser un conocido bug in the MySQL binary distribution (y no fijo!).

Mientras ejecuta install_name_tool en sus archivos mysql2.bundle funcionará, si los elimina y los reconstruye, vuelve al punto de partida.Además, deberá aplicar esta corrección a cualquier otra cosa que tenga enlaces contra ella. Una mejor solución es para solucionar el problema en la propia biblioteca:

$ sudo install_name_tool -id \ 
    /usr/local/mysql/lib/libmysqlclient.18.dylib \ 
    /usr/local/mysql-5.5.12-osx10.6-x86_64/lib/libmysqlclient.18.dylib 

Extracción y la reconstrucción de la gema mysql2:

$ gem uninstall mysql2 
$ gem install mysql2 

... recogerá el cambio a la biblioteca, y todo debería funcionar correctamente, sin tener que jugar con ninguna variable de entorno.

+0

Gracias, esto funciona mejor para mí! Espero que las distribuciones binarias de mysql se arreglen. –

Cuestiones relacionadas