Rails, MySQL e Snow Leopard

Fiz o upgrade para o Snow Leopard usando o disco que obtivemos na WWDC.

Tentando executar alguns dos meus aplicativos rails agora reclama sobre 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) 

Eu poderia jurar que consertei isso uma vez antes. O problema é que

 sudo gem install mysql 

não funciona e dá o erro:

  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 

Alguém já conseguiu mysql para trabalhar com rails no leopardo da neve ainda? Se sim, qual é a sua configuração e melhor ainda, o que posso fazer para reproduzi-la?

Acabei de passar pela mesma dor … aqui está o que funcionou para mim:

  1. Baixe / instale o MySQL de 64 bits 5.1.37 do mysql.com
  2. execute os seguintes comandos:

     sudo gem update --system

     sudo env ARCHFLAGS = "- arch x86_64" gem instalar mysql - --with-mysql-config = / usr / local / mysql / bin / mysql_config

Eu também desinstalei todas as gemas do mysql que estavam flutuando dos meus 10,5 dias, o que pode acontecer se o acima não funcionar para você 🙂

Reconstruir o mysql como 64bit ou instalar a versão de 64bits é importante, mas você também precisa ter certeza de que você irá construir as partes nativas da gem do mysql como 64bit também (isso não se aplica se você estiver em um dos macs originais do Intel Core Duo) ).

Aqui está o comando mágico:

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

Você deve configurar o ARCHFLAGS como mostrado acima sempre que fizer uma instalação gem com componentes nativos no Snow Leopard.

Se você estiver usando o bundler, você pode usar o “bundle config” para definir os argumentos de compilation apropriados para o mysql da seguinte forma:

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

Eu lutei com isso por um longo tempo e finalmente consegui trabalhar no Snow Leopard. Acabei instalando Ruby, RubyGems e MySQL a partir do código-fonte (veja o tutorial Hivelogic para instalar Ruby e RubyGems. O tutorial do MySQL está ligado na parte inferior). Eu finalmente consegui a gema para instalar, mas eu ainda estava recebendo

 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 

Eu finalmente deletei o mysql.bundle (não tenho idéia do que é isso) e tudo funcionou.

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

Espero que ajude alguém.

Eu já vi esse problema muitas vezes. quase toda vez que eu construo o mysql em uma máquina. Eu acho que você tem que passar o seu mysqlconfig como parte do comando 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 

Lembre-se que você precisa dos arquivos dev do mysql para poder construir esta gem.

Eu estava tendo problemas em fazer minha configuração funcionar depois de instalar o Snow Leopard. Eu encontrei o MAMP em http://www.mamp.info e ele empacotou o Apache, PHP e MySQL. você instala como um aplicativo e simplesmente funciona. Talvez valha a pena tentar, e é grátis.

malha

Eu pensei em responder minha própria pergunta aqui. Parece que o problema não está no mysql, mas nas ligações do Ruby do mysql. Eu percebi isso porque quando eu conectei o Querius (meu mysql gui), ele foi capaz de se conectar.

Aqui está como construir a partir da fonte corrigir as ligações:

 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 

Há muitas bibliotecas que eu terei que construir a partir do código-fonte no Snow Leopard e elas continuam aparecendo. MacPorts não parece ser atualizado o suficiente para todas as bibliotecas, então eu estou fora para fazer isso sozinho. Em seguida: freetype ( http://download.savannah.gnu.org/releases-noredirect/freetype/ )

Eu continuei como explicado neste post ( http://www.schmidp.com/2009/06/14/rubyrails-and-mysql-on-snow-leopard-10a380/ ), e tudo agora funciona bem.

Lembre-se de procurar os erros de digitação em seu comando para instalar o driver mysql.

Eu tive esse mesmo problema e aqui está o que funcionou para mim.

  1. Instale o Snow Leopard e o MySQL DMG de 64 bits.

  2. Crie /etc/my.cnf para apontar para o meu diretório de dados anterior do MySQL (como descrito aqui ) e execute

    sudo mysql_upgrade .

  3. Abri o IRB e reinstalei todas as minhas gemas usando (via blog.costan.us/2009/07/rebuild-your-ruby-gems-if-you-update-to.html).

    `gem list`.each_line {| line | sistema ‘sudo gem install # {line.split.first}’}

  4. Desinstalou as gemas do MySQL que eu tinha instalado.

  5. Gema do MySQL instalada com

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

Com isso, tudo parece estar funcionando até agora. * bata a madeira *

Caso você prefira a produção caseira, em vez de instalar o MySQL manualmente.

Desinstale a gem do mysql existente (se houver):

  sudo gem uninstall mysql 

Localize o arquivo ‘mysql_config’:

  find /usr -name 'mysql_config' 

Reinstale o gem do mysql:

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

Nota: substitua /usr/local/bin/ com o caminho mysql_config correspondente encontrado na etapa 2. Também no meu blog .

Ian Selby muito obrigado mas eu tive que remover o sudo de na frente de sudo env ARCHFLAGS="-arch x86_64" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config

Eu estava instalando para um gemset e estou usando rvm que eu acho que pede para você não usar a palavra-chave sudo. Muito obrigado.

Eu resolvi assim:

  1. depois de instalar o arquivo dmg do mysql
  2. Configuração do pacote build.mysql –with-mysql-config = / usr / local / mysql / bin // mysql_config
  3. env ARCHFLAGS = “- arco x86_64”
  4. instalação do pacote

Tendo tido uma folga do Rails por vários anos, passei algum tempo configurando meu ambiente de desenvolvimento. Então pensei em criar um tutorial sobre como instalar a versão mais recente do Rails 3, MySQL e RVM no SnowLeopard, para salvar outros que estejam na minha posição.

Funciona a partir de 21 de agosto de 2011, usando o Rails 3.0.10, MySQL 5.5.15 e RVM 1.7.2. Deve funcionar com versões futuras do Rails 3.0.x, MySQL 5.5.xe RVM 1.7.x.

  1. Instale o XCode, se ainda não estiver instalado. Eu usei o 4.0.2. Infelizmente isso foi retirado pela Apple, mas pode estar disponível em outro lugar na Internet. A versão 3.2.x está livre para download da Apple, mas eu não testei com este tutorial, provavelmente funciona também.

  2. Instalar 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. Instale uma versão do Ruby (por exemplo, 1.9.2) no rvm, as instruções básicas de uso estão aqui .

     user$ rvm install 1.9.2 user$ rvm use 1.9.2 
  4. Crie um gemset para o rvm ruby ​​instalado na etapa 2 (x é o número da versão).

     user$ rvm gemset create rails30x user$ rvm 1.9.2@rails30x 
  5. Instale o Rails 3.0.x (x é o número da versão).

     user$ gem install rails -v 3.0.x. 
  6. Baixe e instale o pacote MySQL 5.5.x, o item de boot e o painel de preferências . Todos os 3 destes estão incluídos no arquivo de instalação do DMG. Instale também o MySQL WorkBench.

    Encontre / usr / local / mysql-version-name / support-files (inserindo o nome do diretório correto do MySQL) e edite mysql.server (com privilégios de root). Ao redor da linha 46, localize as linhas que leem:

     basedir= datadir= 

    e altere-os para ler (inserindo o nome do diretório correto do MySQL):

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

    Salve o arquivo. O MySQL agora pode ser iniciado a partir do painel de preferências.

    Para permitir que o rails 3 use o mysql, instale o gem mysql2 (veja o próximo passo). Primeiro, você precisará definir o DYLD_LIBRARY_PATH para include o diretório da biblioteca MySQL. Para fazer isso, edite seu ~ / .bash_profile em sua pasta pessoal e inclua o seguinte (inserindo o nome correto do diretório MySQL):

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

    Sem a inclusão do diretório no DYLD_LIBRARY_PATH, uma mensagem sobre não encontrar a biblioteca apareceria e o servidor seria interrompido.

  7. Instale a gem mysql2 . (a partir de maio de 2011, a versão 0.2.7 é a versão de trabalho mais recente com o Rails 3.0.x).

     user$ gem install mysql2 -v 0.2.7 
  8. Crie um aplicativo rails e seu database correspondente (appname_development).

     user$ rails new appname 
  9. Adicione isto ao Gemfile da aplicação: gem 'mysql2', "0.2.7"

  10. Adicione isto ao database.yml do aplicativo:

     development: adapter: mysql2 encoding: utf8 reconnect: false database: appname_development pool: 5 username: username password: pwd host: localhost 
  11. Inicie o aplicativo e marque “Sobre o ambiente do seu aplicativo”. Tudo deveria estar funcionando corretamente.

As instruções para configurar ARCHFLAGS e passar –mysql-config = … não parecem ser suficientes para resolver isso para mim no Snow Leopard. Além de fazer isso, adicionei:

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

para o meu perfil bash, e isso resolveu para mim.

Eu tentei o truque archflags muitas vezes com pequenas variações, mas nunca funcionou para mim.

O que finalmente funcionou foi voltar para a versão de ruby ​​e gem instalada com o snow leopard.

Eu construí e instalei a minha própria versão, que funcionou para mim em todos os aspectos, exceto este. Uma vez que tudo parece funcionar bem, não posso deixar de adivinhar que o plugin mysql tem algumas suposições funky nele. Enfim, tudo que fiz foi mudar / usr / bin para ser o primeiro no meu caminho novamente. Eu tinha instalado o ruby ​​em /usr/local/ruby-1.8.7 e /usr/local/ruby-1.9.1 para poder alternar facilmente. Pensei em mencionar que a solução de archflags parece funcionar para muitas pessoas, mas não para todas.

Eu renomeiei o programa mysql_config de $ MYSQL_HOME / bin para outra coisa para que o script de configuração do instalador gem não consiga encontrá-lo. Mesmo que eu estivesse usando a opção libs, o instalador gem sempre usava as configurações de compilation da minha instalação do mysql, que é um binário gordo. Mas a instalação padrão do ruby ​​é apenas x86_64 e, portanto, a compilation da gem falha. Depois de renomear o programa mysql_config o seguinte comando funcionou bem e instalou a gem:

 sudo env ARCHFLAGS="-arch x86_64" gem install mysql -- --with-mysql-dir=/usr/local/mysql 

Se você está instalando o gem mysql com o RVM você precisa usar o seguinte código para instalá-lo

 sudo env ARCHFLAGS="-arch x86_64" gem install mysql 

Este método funcionou para mim no Leopard Server, nenhum dos acima funcionou

este artigo resolveu o problema para mim 🙂

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

  • Antes do Leopard

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

    • Leopard em uma máquina PPC:

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

    • Leopard em uma máquina Intel:

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

    • Snow Leopard (apenas na Intel):

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