Biblioteca não carregada: erro libmysqlclient.16.dylib ao tentar executar 'rails server' no OS X 10.6 com mysql2 gem

206

Eu tenho lutado com isso há algum tempo.

Instalei o Rails 3, gem, mysql na minha máquina Snow Leopard. Tudo estava indo bem até eu criar meu primeiro projeto e tentar executar

rails server

Ao executar isso, recebo:

jontybrook$ rails server
/Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle: dlopen(/Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle, 9): Library not loaded: libmysqlclient.16.dylib (LoadError)
  Referenced from: /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle
  Reason: image not found - /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle
    from /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2.rb:7
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:64:in `require'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:64:in `require'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:62:in `each'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:62:in `require'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:51:in `each'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:51:in `require'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler.rb:112:in `require'
    from /Users/jontybrook/Dropbox/CODING/simple_cms/config/application.rb:7
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.3/lib/rails/commands.rb:28:in `require'
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.3/lib/rails/commands.rb:28
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.3/lib/rails/commands.rb:27:in `tap'
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.3/lib/rails/commands.rb:27
    from script/rails:6:in `require'
    from script/rails:6
jontybrook$ 

Tanto quanto eu posso dizer, o problema está na gema do mysql2. O MySQL parece estar funcionando bem e meu Gemfile faz referência ao mysql2, meu arquivo database.yml também parece ok.

O erro menciona

Reason: image not found - /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle

E ainda

jontybrook$ cd /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2
jontybrook$ ls
client.rb   em.rb       error.rb      mysql2.bundle result.rb

MySQL2.bundle está aí !?

Se eu usar a antiga jóia do mysql, o WEBrick inicializa bem. Mas isso não é o ideal, é?

Eu tentei tudo o que o google pode me dar! Qualquer ajuda muito apreciada.

Jonty Brook
fonte

Respostas:

393

Nunca consegui que nenhuma dessas respostas funcionasse para mim, mas esse é o comando que usei para fazer funcionar para mim. Dessa forma, você não precisa usar install_name_tool toda vez que atualizar seu mysql

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
inchado
fonte
11
Essa é a maneira mais simples e correta de resolver esse problema.
Voldy
2
obrigado por isso. a resposta marcada acima funcionou apenas para um site, mas funcionou permanentemente. É mo 'betta.
fregas
12
Para quem está curioso sobre o que está acontecendo, esse comando cria um link simbólico do segundo local para o primeiro. Quando a gem procurar a biblioteca do cliente MySQL em /usr/lib, esse link será resolvido para o local onde está realmente instalada. No OS X, geralmente está abaixo /usr/local/mysql/lib, e é aí que esse comando se vincula. Se sua lib estiver instalada em um local diferente, você precisará ajustar este comando. Digite locate libmysqlclient.18.dylibe substitua o resultado pelo primeiro argumento depois -s.
Siobhán
1
@ Sean D., quando executo localizar libmysqlclient.18.dylib, recebo esta saída, o WARNING: The locate database (/var/db/locate.database) does not exist. To create the database, run the following command: sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist Please be aware that the database can take some time to generate; once the database has been created, this message will no longer appear.que está errado?
GiH 24/01
1
@ GiH Você só precisa executar o comando que ele diz ( sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist). Isso iniciará o processo de indexação do disco rígido, o que fará com que o locatecomando funcione no futuro. Na maioria dos casos, porém, acho que você não precisará fazer isso e pode usar o comando fornecido pelo luvlss como está.
Siobhán
93

Eu resolvi isso, eventualmente!

Reinstalei o Ruby e o Rails no RVM. Estou usando o Ruby versão 1.9.2-p136.

Após a reinstalação no rvm, esse erro ainda estava presente.

No final, o comando mágico que o resolveu foi:

sudo install_name_tool -change libmysqlclient.16.dylib /usr/local/mysql/lib/libmysqlclient.16.dylib ~/.rvm/gems/ruby-1.9.2-p136/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle

Espero que isso ajude alguém!

Jonty Brook
fonte
1
De alguma forma, isso redefiniu os privilégios do mysql e agora não consigo fazer o login ... mesmo depois de redefinir a senha usando um arquivo conforme descrito nos documentos do mysql.
Coderama
2
Obrigado, isso fez por mim. E para outras pessoas com o mesmo problema, se você usar o rvm, pule o sudo, caso contrário, as permissões provavelmente serão alteradas.
DanneManne
2
O comando magic funciona mesmo se você não estiver usando o RVM - basta alterar o último argumento para apontar para mysql2-0.2.6/lib/mysql2/mysql2.bundleonde suas gemas estão instaladas.
Tobias Cohen
2
Muito obrigado. Como diabos você descobriu isso?
Derek
7
Obrigado! Eu precisava de um comando ligeiramente diferente para o meu Mac OS X Lion em execução RVM 1.6.4 com Ruby 1.9.2-p180, gem mysql2 0.3.10: sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/rvm/gems/ruby-1.9.2-p180/gems/mysql2-0.3.10/lib/mysql2/mysql2.bundle
Randy Eppinger
40

Para mim, isso foi apenas porque eu atualizei o mysql, mas não atualizei o gem do mysql2 - uma reinstalação do gem o corrigirá ...

gem pristine mysql2

Lucas
fonte
Essa deve ser a resposta selecionada.
El Guapo
26

Eu tenho o mesmo problema. Parece que não foi possível encontrar a biblioteca libmysqlclient. Uma correção temporária que funcionou para mim é a seguinte:

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib/

Não tenho certeza de onde a configuração está especificando o caminho de carregamento ou o que está definido, mas minha instalação do mysql não parecia estar nela. Vou postar novamente se encontrar uma solução mais permanente.

Editar: Na verdade, essa correção parece abordar com mais precisão o problema.

Ogapo
fonte
24

Adicione o seguinte ao seu ~/.bash_profile:

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

Isso funcionou para mim

DV Dasari
fonte
Sim, funciona em 1.9.3-p448. Pena que não é uma resposta aceita.
precisa saber é o seguinte
17

Na atualização do OSX El Capitan, quando você faz isso:

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

lança um erro como

ln: /usr/lib/libmysqlclient.18.dylib: Operation not permitted

Portanto, para evitar isso, o que você pode fazer é primeiro localizar libmysqlclient.18.dylibusando o comando

User$ locate libmysqlclient.18.dylib

No meu caso, ele retornou /usr/local/mysql-5.5.24-osx10.5-x86_64/lib/libmysqlclient.18.dylib

Então, em vez de usr/lib/criarmos o link simbólico para o usr/local/lib/seguinte:

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

Mais detalhes: https://forums.developer.apple.com/thread/7935

Sony Mathew
fonte
1
No El Capitan, para mim, tudo o que precisou foi sua última linha:sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
Justin
Ainda bem que ajudou alguém. : D
Sony Mathew
Esta é a resposta certa para elcapitan seu link de destino deve estar na /usr/local/libpasta
Arnold Roa
13

as seguintes linhas funcionam para mim. Estou usando o mac 10.7.2.

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

S. Rasel
fonte
1
Este foi o que corrigiu o meu problema. Obrigado!
Justin Bozonier
11

Acabei de encontrar este problema. Tudo o que eu precisava fazer era desinstalar o mysql2 gem e reinstalá-lo. Espero que isso funcione para outras pessoas

Anh Pham
fonte
1
Na minha máquina, executando o Mavericks, eu removi toda a versão do mysql2 gem com o gem uninstall mysql2 e respondi All versionsno prompt. Em seguida, executei o brew upgrade mysql e depois instale o mysql2.
Martin Streicher
4

É assim que funcionou para mim:

Eu executei o comando abaixo
Executei sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib ~ / .rvm / gems / ruby-1.9.2-p180 / gems / mysql2-0.2.7 /lib/mysql2/mysql2.bundle

Meus ambientes:
$ rails -v Rails 3.0.6

$ mysql --version
mysql Ver 14.14 Distrib 5.5.11, para osx10.6 (i386) usando a linha de leitura 5.1

$ ruby ​​-v
ruby 1.9.2p180 (revisão de 18/02/2011 30909) [x86_64-darwin10.7.0]

Espero que isso ajude alguém.

DV Dasari
fonte
3

Obrigado, Ogapo! A exportação desse alias funcionou para mim e segui o link; no meu caso, o mysql2.bundle estava em /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle, portanto Ajustei o install_name_tool para modificar esse pacote em vez de um no ~ / .rvm e fiz com que funcionasse da maneira que deveria ser feita.

Então agora:

   $ otool -L /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle 
    /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle:
        /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/libruby.1.dylib (compatibility version 1.8.0, current version 1.8.7)
        /usr/local/mysql/lib/libmysqlclient.16.dylib (compatibility version 16.0.0, current version 16.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.1)
tobinjim
fonte
3

oi funcionou para mim a partir do link recomendado de Fredy Andersen

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

só tive que mudar para minha versão do mysql, no comando, obrigado

manuelBetancurt
fonte
3

Resolvi esse problema excluindo meu gemset para o meu projeto atual e recriando-o e executando novamente a instalação do pacote. Eu acho que causou isso instalando uma versão mais recente do mysql.

Ryan
fonte
3

Eu tive esse problema ao trabalhar com o Django, uso brewpara instalar muitos dos meus programas de código aberto e precisava fazer o seguinte, pois costumava brewinstalar mysql:

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

Certifique-se de substituir por sua versão das bibliotecas!

Addiction2Code
fonte
3

bundle install mysql --forceme ajudou. Reinstalou dependências que foram removidas como resultado brew uninstall mysql.

Aram
fonte
Unknown switches '--force'
Arnold Roa
2

Jonty, também estou lutando com isso.

Eu acho que há uma pista aqui:

otool -L /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle

/Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle:
    /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/libruby.1.dylib (compatibility version 1.8.0, current version 1.8.7)
    libmysqlclient.16.dylib (compatibility version 16.0.0, current version 16.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.1)

Observe que o caminho para o dylib é bastante curto?

Estou tentando descobrir onde as instruções de instalação da gema estão deixando o caminho do dylib, mas é lento, pois eu nunca construí uma gema.

Vou postar mais se encontrar mais!

tobinjim
fonte
2

Eu tive esse mesmo problema há alguns dias. Eu finalmente consegui resolver isso. Não sei bem como, mas vou lhe contar o que fiz de qualquer maneira. Talvez isso ajude você.

Comecei baixando o RVM. Se você ainda não o estiver usando, recomendo fazê-lo. Ele basicamente cria uma sandbox para uma nova instalação separada do Ruby, RoR e RubyGems. De fato, você pode ter várias instalações simultaneamente e alternar instantaneamente entre si. Ele funciona como um encanto.

Por que isso é útil? Porque você não deve mexer com a instalação padrão do Ruby no OS X. O sistema depende disso. É melhor deixar a instalação padrão do Ruby e RoR em paz e criar uma nova usando o RVM que você possa usar para o seu próprio desenvolvimento.

Depois de criar minha instalação separada do Ruby, eu apenas instalei o RoR, RubyGems e mysql, e funcionou. Para as etapas exatas que tomei, veja minha pergunta: Instalando Rails, MySQL, etc. tudo dá errado

Novamente: não sei ao certo se isso resolverá o seu problema. Mas certamente fez o truque para mim e, de qualquer forma, o uso do RVM é altamente recomendável.

Rits
fonte
2

Eu ainda descobri que, com as soluções acima, não funcionava (por exemplo) com o plug-in Rails para TextMate. Eu recebi um erro semelhante (ao recuperar o esquema do banco de dados).

Então, o que fez é abrir o terminal:

cd /usr/local/lib
sudo ln -s ../mysql-5.5.8-osx10.6-x86_64/lib/libmysqlclient.16.dylib .

Substitua mysql-5.5.8-osx10.6-x86_64 pelo seu próprio caminho (ou mysql).

Isso cria um link de símbolo para a lib, agora o rails é executado na linha de comando, assim como os plug-ins do TextMate, como ruby-on-rails-tmbundle .

Para ficar claro: isso também corrige o erro que você recebe ao iniciar o servidor rails.

Roger
fonte
2

Isso geralmente acontece quando você atualiza o mysql. A jóia do mysql2 instalada que foi construída nas bibliotecas mysql antigas não pode funcionar com novas bibliotecas. Só preciso reinstalá-lo.

Desinstale o mysql2 com gem uninstall mysql2. Em seguida, instale-o comgem install mysql2

longkt90
fonte
1

Eu o resolvi criando o arquivo .rvmrc na pasta do meu projeto, contendo:

rvm use <yourrubie>

então entrando no caminho do meu projeto

cd ~/myprojectpath

então eu corro

bundle install
Tomasz Mazur
fonte
1

Minha versão do comando luvlss:

Mac OSX 10.10.5

MySQL 5.6.27

Passageiro 5.0.21

sudo ln -s /usr/local/mysql-5.6.27-osx10.8-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

Se você estiver tentando vários links diferentes, como eu, faça uma limpeza com:

sudo unlink /usr/lib/libmysqlclient.18.dylib

AlexJ
fonte
1

Abra um terminal e execute o seguinte:

export PATH=$PATH:/usr/local/mysql/bin

Deveria funcionar.

Slipstream
fonte
1
Isso fez o trabalho, obrigado !!! Eu tive problemas para executar o Django no Visual Studio Code. Continua recebendo o erro se eu instalei o mysqlclient no virtualenv.
Irshu 7/03
0

Se você estiver usando o OSX e instalando o mysql usando o brew, poderá:

brew link mysql

Se você está tendo problemas com a versão (eu tinha o mysql 5.7 em execução enquanto minha jóia exigia a 5.6.25), você pode

brew unlink mysql
brew switch mysql 5.6.25
Ariel Cabib
fonte
0

Para mim, eu tive que desinstalar manualmente o mysql

brew uninstall mysql
rm -rf /usr/local/var/mysql
brew install mysql
Dillawes0me
fonte