2010-06-28 20 views
15

Cercando di avviare una nuova app Rails 3 beta 4 con mysql .... Esecuzione di OS X Snow Leopard. Con le versioni precedenti di Rails non ho problemi con MySQL. Ma ora quando inizio le Rails 3 app ottengo il seguente errore quando faccio clic su "Chi l'ambiente applicativo" sulla schermata di avvio delle guide index.html:Rails 3 Mysql Problemi

metodo non definito `init' per MySQL: Classe

+0

hai 'gem 'mysql'' nel tuo Gemfile? –

+0

Questo problema ha finito per andare via per me quando è uscito il rilascio ufficiale, per me era solo un problema quando stavo usando la versione beta. –

risposta

16

Cambia il tuo Gemfile per usare 'mysql2', è un driver più moderno e ha caratteristiche più piacevoli come altre persone hanno menzionato.

Le nuove applicazioni Rails utilizzano la gemma mysql2 per impostazione predefinita.

+5

Assicurati di cambiare anche il tuo file database.yml per usare "adapter: mysql2" piuttosto che "adapter: mysql" altrimenti otterrai un errore sul mysql2 gem che non viene caricato. – nikz

+3

devo anche installare una gemma mysql2? Questo è vicino. Ho ricevuto il seguente errore: rastrello interrotto! dlopen (/Library/Ruby/Gems/1.8/gems/mysql2-0.3.2/lib/mysql2/mysql2.bundle, 9): libreria non caricata: libmysqlclient.18.dylib Riferimento da:/Library/Ruby/Gems /1.8/gems/mysql2-0.3.2/lib/mysql2/mysql2.bundle Motivo: immagine non trovata - /Library/Ruby/Gems/1.8/gems/mysql2-0.3.2/lib/mysql2/mysql2.bundle /Users/chris/rails_projects/sienab/Rakefile: 4 (Vedi traccia completa eseguendo attività con --trace) – chris

+0

Se hai bisogno di istruzioni preparate, puoi usare la gemma Sequel, dato che MySql2 gem non la supporta ancora. https://github.com/jeremyevans/sequel –

3

I ha finito per passare dalla gemma mysql alla gemma ruby-mysql, ha funzionato.

+1

funziona davvero ~~ mysql.gem e mysql2.gem non funziona ... – lkahtz

+1

questa non è davvero una soluzione, visto che stai cambiando usando Ruby piuttosto che codice nativo (un po 'più lento). Dovresti passare alla gemma mysql2 come suggerisce nzkoz. – nikz

1

Penso di aver trovato la soluzione per il problema. Nel mio caso il problema era che la gemma mysql non era stata installata correttamente usando il bundler. quando ho fatto questo:

bundle install mysql (noobish errore)

tutte le gemme sono andati a mysql, ma in seguito ho controllato i documenti del bundler gemma e ha fatto questo:

bundle install bundler_files (per sapere dove sono le gemme in futuro)

tutto sembrava quasi ok tranne che durante l'installazione di mysql gem ho ricevuto degli errori. Ho notato che era a causa del mio percorso cartella "/ home/pawel/Aptana Studio Workspace/myrails_app"

Se ci sono spazi nel percorso della cartella questa gemma non si installerà correttamente e in seguito quando si modifica il percorso in uno senza spazi e prova ad installare la gemma mysql ESSO VISUALIZZA QUALSIASI ERRORE, ma l'installazione sarà danneggiata, perché ci saranno alcune cartelle aggiuntive con alcuni file ecc.

CANCELLARE LA CARTELLA GEM CREATA DA BUNDLER E REINSTALL GEMME CON QUESTO COMANDO:

bundle install

Questo ha risolto il problema.

2

Per un utilizzo semplice, che è tipico (collegamento, interrogazione, iterazione sui risultati), ho trovato mysql2 gem che è molto più veloce di gemme mysql o ruby-mysql e auto-lancia valori ai tipi corretti. E si installa perfettamente su Snow Leopard mentre non riuscivo a far funzionare mysql gem.

Maggiori informazioni presso http://github.com/brianmario/mysql2

7

Ho incontrato lo stesso problema (RoR 3, OSX 10.6, mysql 2.8.1 gemma).

È possibile utilizzare IRB per escludere RoR:

irb 
require 'rubygems' 
require 'mysql' 
db = Mysql.connect('hostname', 'username', 'password', 'database') 

Se quanto sopra non funziona, si può decidere di provare a rimuovere la gemma mysql e reinstallarlo. Mi sono imbattuto in un post che diceva bundle install potrebbe rovinare l'installazione senza visualizzare errori.

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

Verificare le cose funzionano tramite irb, quindi avviare le rotaie di nuovo.

+0

funziona anche per i386 arch: uname -a Darwin iMac-LZ.local 10.5.0 Darwin Kernel Versione 10.5.0: Fri Nov 5 23:20:39 PDT 2010; root: XNU-1504,9.17 ~ 1/RELEASE_I386 i386 – Vitalie

+2

Dopo aver fatto ciò, ho ricevuto l'errore: 'metodo non definito 'connect' per Mysql: Class da /Users/sscirrus/.rvm/rubies/ruby-1.9.2-p0/bin/irb:16 : in

'. Come risolvere questo? – sscirrus

0

Ho lo stesso problema dopo l'aggiornamento a Snow Leopard. Durante l'installazione la gemma di MySQL, ho avuto un po 'di errori circa la documentazione, poi, in esecuzione il server:

undefined method `init' for Mysql:Class 

ero anche avendo alcuni problemi simili, ma non imparentati con altre gemme, in particolare quelli che avevano i componenti C che serve la compilazione di tali come RedCloth e hpricot:

Unable to compile native extensions 

Questi errori sono stati a che fare con estensioni native nella base di 64 architettura. La soluzione era triplice:

  1. Ho reinstallato XCode 4. L'aggiornamento a Snow Leopard aveva interrotto il mio compilatore C, quindi alcune gemme non riuscivano a compilare. Questo mi ha fatto un passo avanti, ma non ha risolto il problema.
  2. Ho eliminato e reinstallato RVM. Sembrava che stessero installando gemme in una directory e trovandole in un'altra. Questo ha risolto ogni errore di base64 dell'architettura nativa, ma la gemma MySQL stava ancora fallendo.
  3. Ho rimosso e declassato MySQL alla versione 5.1. Questo ha risolto il problema delle gemme MySQL.

Ora tutto va bene.

1

Penso che quello che succede è che la gemma mysql non è in grado di caricare la libreria dinamica mysql (che dovrebbe essere fornita dall'installazione nativa di MySQL). Per verificare se questo sta accadendo, fare questo

$ irb 
1.9.2p320 :001 > require 'mysql_api' 
=> true 
1.9.2p320 :002 > 

Se non è in grado di caricare questo basso livello mysql_api, (che fornisce in realtà la funzionalità per la mysql gemma), che vi darà alcuni errori potenzialmente utili. Di solito non è in grado di trovare la libreria dinamica. Per rimediare a questo, ho trovato un paio di soluzioni:

Da http://wonko.com/post/how-to-install-the-mysqlruby-gem-on-mac-os-x-leopard, faccio questo

Per livello di sistema installare

sudo env ARCHFLAGS="-arch i386" gem install mysql -- \ 
    --with-mysql-dir=/usr/local/mysql --with-mysql-lib=/usr/local/mysql/lib \ 
    --with-mysql-include=/usr/local/mysql/include 

o locale installare

env ARCHFLAGS="-arch i386" gem install mysql -- \ 
    --with-mysql-dir=/usr/local/mysql --with-mysql-lib=/usr/local/mysql/lib \ 
    --with-mysql-include=/usr/local/mysql/include 

e poi da http://alexbraunstein.com/2011/08/12/library-loaded-libmysqlclient-18-dylib/ inserire .bash_profile:

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