macos - rails - install ruby with rvm
el servidor Rails no puede comenzar con mysql2 usando rvm & ruby 1.9.2-p0 en OSX 10.6.5 (9)
Recibo el siguiente error cuando inicio el servidor de rieles:
$ rails server
/Users/ssmith/.rvm/gems/ruby-1.9.2-p0/gems/mysql2-0.2.6/lib/mysql2.rb:7:in `require'': dlopen(/Users/ssmith/.rvm/gems/ruby-1.9.2-p0/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle, 9): Library not loaded: libmysqlclient.16.dylib (LoadError)
Referenced from: /Users/ssmith/.rvm/gems/ruby-1.9.2-p0/gems/mysql2- 0.2.6/lib/mysql2/mysql2.bundle
Reason: image not found - /Users/ssmith/.rvm/gems/ruby-1.9.2-p0/gems/mysql2-
0.2.6/lib/mysql2/mysql2.bundle
He instalado mysql2 con el siguiente comando después de que rvm use el comando ruby-1.9.2-p0:
$ gem install mysql2 -- --with-mysql-dir=/usr/local/mysql --with-mysql-config=/usr/local/mysql/bin/mysql_config
Building native extensions. This could take a while...
Successfully installed mysql2-0.2.6
1 gem installed
Installing ri documentation for mysql2-0.2.6...
Enclosing class/module ''mMysql2'' for class Client not known
Installing RDoc documentation for mysql2-0.2.6...
Enclosing class/module ''mMysql2'' for class Client not known
Tengo mysql2 en mi Gemfile, así como en el archivo database.yml y la instalación del paquete completa bien
$ bundle show mysql2
/Users/ssmith/.rvm/gems/ruby-1.9.2-p0/gems/mysql2-0.2.6
Entiendo que el error del servidor de los rieles se debe a que no conoce la ubicación de mysql_config en OSX, sin embargo, en la instalación de Gema, especifiqué la ubicación correcta. Sin embargo, parece que la gema de RVM no respeta esa ubicación mysql_config.
Alguien tiene una solución para esto?
Actualizado mysql a la última versión y vuelva a instalar la gema mysql2 me funciona brew upgrade mysql
gem uninstall mysql2
gem install mysql2
Por cierto: mi versión de MySQL es 5.7.18, la versión de la gema mysql2 es 0.4.5
Cuenta,
La respuesta de Frederic resolverá este problema, sin embargo, es posible que tenga que cambiar algunos de los elementos del comando según las versiones y cómo se nombran las cosas en su sistema.
Por ejemplo, en la versión más reciente de mysql, libmysqlclient.16.dylib es en realidad libmysqlclient.18.dylib. Intenta hacer un:
locate libmysqlclient.18.dylib
Si eso no le devuelve el camino, puede ir a:
/usr/local/{your-mysql}/lib
para encontrar el archivo Luego solo una PWD para encontrar el directorio correcto para el comando.
También deberá determinar cuáles son los nombres reales de los rubíes que ha instalado. Puedes encontrar esto usando
rvm info
Por ejemplo, mi instalación de 1.9.2 es ruby-1.9.2.p180, no ruby-1.9.2p0. Esto necesitará ser cambiado en el comando de Frederics también.
Entonces, para mí, la orden de Frederic se convirtió en la fijación de los rubíes rvm para 1.8.7 y 1.9.2, respectivamente:
sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql-5.5.10-osx10.6-x86_64/lib/libmysqlclient.18.dylib ~/.rvm/gems/ruby-1.8.7-p334/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle
sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql-5.5.10-osx10.6-x86_64/lib/libmysqlclient.18.dylib ~/.rvm/gems/ruby-1.9.2-p180/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle
El mío estaba en una ubicación diferente, tuve que usar:
sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /Library/Ruby/Gems/1.8/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundle.
El problema proviene de la gema mysql2 que falta la biblioteca dinámica de MySQL.
Una solución más limpia que install_name_tool ...
necesitaría actualizar su DYLD_LIBRARY_PATH
para agregarle libs de MySQL. Para hacerlo, actualice su ~/.bash_profile
para agregar la carpeta de la biblioteca MySQL:
export DYLD_LIBRARY_PATH="/usr/local/mysql/lib:$DYLD_LIBRARY_PATH"
Nota: es posible que desee actualizar la ubicación de MySQL en función de su instalación
Esto debería mantener las cosas limpias, pero también garantizar que cualquier gema o código que requiera bibliotecas dinámicas de MySQL las encuentre.
Referencia: http://lightyearsoftware.com/2011/02/mysql-5-5-on-mac-os-x/
Actualización de referencia Julio de 2012: un cambio en OS X 10.8 hace que el método fácil anterior sea menos elegante. Si configura esa variable, cada vez que ejecute un programa setuid o setgid, obtendrá esta advertencia en stderr:
dyld: DYLD_ environment variables being ignored because main executable (...) is setuid or setgid
Los desarrolladores de Ruby que usen Phusion Passenger Standalone verán este mensaje en su consola cada cinco segundos. Se pone realmente irritante, muy rápido.
He archivado un error con Apple. También está en OpenRadar.
Mientras tanto, también hay una tercera forma de solucionar el problema de la ruta de la biblioteca cliente que no requiere establecer DYLD_LIBRARY_PATH (trabajando alrededor de este problema 10.8) o piratear archivos .bundle con install_name_tool:
$ brew install mysql
En OS X 10.8 (Mountain Lion), todas las respuestas enumeradas tienen problemas, como se señala en las respuestas y comentarios.
- Establecer
DYLD_LIBRARY_PATH
para incluir / usr / local / mysql / lib proporciona advertencias de OS X y de brew - Usar
install_name_tool
para hackear donde se ve el gemelo binario necesitaría ser rehecho cada vez que se instale o actualice la gema. - Cambiar a
brew
''s mysql puede no funcionar; y en cualquier caso no quiero reconfigurar una instalación que ya funciona
Una solución más simple y robusta en mi humilde opinión es poner un enlace a la biblioteca en la ruta predeterminada de búsqueda de la biblioteca dinámica, que incluye convenientemente /usr/local/lib
. Es decir:
ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib
Encontré la respuesta aquí: Mysql 5.5, Snow Leopard and rails
sudo install_name_tool -change libmysqlclient.16.dylib /usr/local/mysql/lib/libmysqlclient.16.dylib ~/.rvm/gems/ruby-1.9.2-p0/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle
Esto es lo que hago (similar a otros)
sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib ~/.rvm/gems/ruby-1.9.2-p290/gems/mysql2-0.3.10/lib/mysql2/mysql2.bundle
Estuve atascado en esto por un tiempo y llegué a una solución diferente.
Observe cómo la biblioteca que falta es la versión 16 :
Biblioteca no cargada: libmysqlclient.16.dylib (LoadError)
Resulta que tenía la versión 20 de esa biblioteca - libmysqlclient.20.dylib
Tuve correctamente gem ''mysql2''
en mi Gemfile, pero lo que tenía que hacer era desinstalar la gema, gem uninstall mysql
(tenía varias versiones de la gema instaladas) y luego hacer una nueva bundle install
para obtener solo la versión que necesitaba de esta biblioteca.
Después de eso, buscó y encontró la versión correcta de esa lib.
a continuación a través de: http://lightyearsoftware.com/2011/02/mysql-5-5-on-mac-os-x/
Actualización de julio de 2012:
Un cambio en OS X 10.8 hace que el método fácil anterior sea menos elegante. Si configura esa variable, cada vez que ejecute un programa setuid o setgid, obtendrá esta advertencia en stderr:
dyld: DYLD_ environment variables being ignored because main executable (...) is setuid or setgid
Los desarrolladores de Ruby que usen Phusion Passenger Standalone verán este mensaje en su consola cada cinco segundos. Se pone realmente irritante, muy rápido.
He archivado un error con Apple. También está en OpenRadar.
Mientras tanto, también hay una tercera forma de solucionar el problema de la ruta de la biblioteca cliente que no requiere establecer DYLD_LIBRARY_PATH (trabajando alrededor de este problema 10.8) o piratear archivos .bundle con install_name_tool:
$ brew install mysql