Rails, MySQL und Snow Leopard

68

Ich habe mit der CD, die wir bei WWDC bekommen haben, ein Upgrade auf Snow Leopard durchgeführt.

Der Versuch, einige meiner Rails-Apps auszuführen, beschwert sich jetzt über 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)

Ich hätte schwören können, dass ich das schon einmal behoben habe. Das Problem ist, dass

sudo gem install mysql

funktioniert nicht und gibt den Fehler:

 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

Hat jemand schon MySQL dazu gebracht, mit Schienen auf Schneeleoparden zu arbeiten? Wenn ja, wie ist Ihr Setup und was kann ich tun, um es zu reproduzieren?

coneybeare
quelle

Antworten:

107

Ich habe gerade den gleichen Schmerz durchgemacht ... hier ist, was für mich funktioniert hat:

  1. Laden Sie das 64-Bit-MySQL 5.1.37 von mysql.com herunter / installieren Sie es
  2. Führen Sie die folgenden Befehle aus:
    sudo gem update --system

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

Ich habe auch alle MySQL-Edelsteine ​​deinstalliert, die seit 10,5 Tagen im Umlauf waren. Das kann passieren, wenn das oben genannte für Sie nicht funktioniert :)

Ian Selby
quelle
Vielen Dank; Du rettest nur den Rest meiner Haare!
Matt Darby
Gutes Zeug. Das hat mich etwas Schreckliches verblüfft.
Nickmjones
Ich wollte Schritt 1 ein wenig erweitern, da die Installation von MySQL die halbe Miete ist. Ich habe diese Version von mysql als Zip heruntergeladen, nicht als gz downloads.mysql.com/archives/mysql-5.1/mysql-5.1.44.zip Und ich habe diese Anweisungen befolgt. hivelogic.com/articles/compiling-mysql-on-snow-leopard gist.github.com/178699 Ich hatte keine Probleme, MySQL mit diesen Schritten zu installieren, dann keine Probleme, SetP # 2 von oben auszuführen.
Jspooner
Das hat bei mir funktioniert. Was hat mich von all den Links abgehalten, einschließlich des rubyonrails.org-Wikis, die besagten, 64-Bit-MySQL mit Rails unter OSX NICHT zu installieren. Vielen Dank!
Kyle Heironimus
Entschuldigung, ich möchte nicht dumm klingen, aber wird Ihre Methode anstelle der sudo gem install mysql verwendet? Gibt es eine Möglichkeit herauszufinden, ob der Edelstein richtig installiert wurde? danke Ich bin sehr neu in Mac und MYSQL und relativ neu in Ruby on Rails.
Mo.
10

Das Neuerstellen von MySQL als 64-Bit oder das Installieren der 64-Bit-Version ist wichtig, aber Sie müssen auch sicherstellen, dass Sie die nativen Teile des MySQL-Gems auch als 64-Bit erstellen (dies gilt nicht, wenn Sie auf einem der ursprünglichen Intel Core Duo-Macs arbeiten ).

Hier ist der magische Befehl:

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

Sie sollten die ARCHFLAGS wie oben gezeigt einstellen, wenn Sie eine Edelsteininstallation mit nativen Komponenten auf Snow Leopard durchführen.

Shebanator
quelle
Ich habe einen der originalen Core Duo Macs (Macbook der 1. Generation), also keine 64-Bit-CPU. Wie würden Sie Ihren Befehl für diese Architektur ändern?
Martijn Heemels
Installieren Sie für 32-Bit-Macbooks oder Macbooks Pro die reguläre x86-Version von MySQL und verwenden Sie den folgenden Befehl: sudo env ARCHFLAGS = "- arch i386" gem installiere mysql - --with-mysql-config = / usr / local / mysql / bin / mysql_config
Martijn Heemels
Ja, wenn Sie Macbooks der 1. Generation haben, sollten Sie all diese Dinge vor dem Befehl gem einfach weglassen.
Shebanator
Auf der Website rubyonrails.org finden Sie jetzt detaillierte Anweisungen zum Upgrade auf Schneeleoparden, die im Allgemeinen besser sind als die auf dieser Seite aufgeführten: weblog.rubyonrails.org/2009/8/30/upgrading-to-snow-leopard In Insbesondere gibt es am Ende ein schönes Skript, mit dem Sie alle Ihre einheimischen Edelsteine ​​aktualisieren können.
Shebanator
7

Wenn Sie Bundler verwenden, können Sie "Bundle-Konfiguration" verwenden, um die richtigen Build-Argumente für MySQL wie folgt festzulegen:

bundle config build.mysql --with-mysql-config=/usr/local/mysql/bin/mysql_config
Steven Soroka
quelle
Ja, dies könnte sich mit Bundler 1.0 geändert haben. Es verwendet wahrscheinlich Umgebungsvariablen oder so etwas ... Ich musste es nicht explizit mit 1.0 einstellen
Steven Soroka
6

Ich habe lange damit gekämpft und es endlich auf Snow Leopard zum Laufen gebracht. Am Ende habe ich Ruby, RubyGems und MySQL von der Quelle aus installiert ( Informationen zur Installation von Ruby und RubyGems finden Sie im Hivelogic-Tutorial . Das MySQL-Tutorial ist unten verlinkt). Ich bekam endlich das Juwel zu installieren, aber ich bekam immer noch

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

Ich habe endlich das gelöscht mysql.bundle(ich habe keine Ahnung, wofür das ist) und alles hat funktioniert.

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

Hoffe das hilft jemandem.

Sam Soffes
quelle
1
Mann, danke für die Hinweise auf dem mysql.bundle. Das hat mich an einer meiner Maschinen verbrannt.
Scott
1
"Ich habe endlich das mysql.bundle gelöscht (ich habe keine Ahnung, wofür das ist) und alles hat funktioniert." Mit der gleichen Logik könnten Sie versuchen, diese große "mach_kernel" -Datei oder diese "tmp" -Verzeichnisse zu löschen. Das Löschen von Dingen aus dem System, die von Apple installiert wurden, ist keine gute Idee. Recherchieren Sie, um zu verstehen, warum es zuerst vorhanden ist, und entscheiden Sie dann, ob das Löschen in Ordnung ist.
der Blechmann
4

Ich habe dieses Problem oft gesehen. Fast jedes Mal, wenn ich MySQL auf einer Maschine baue. Ich denke, Sie müssen Ihre mysqlconfig als Teil des gem install Befehls übergeben.

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

Denken Sie daran, dass Sie MySQL-Entwicklungsdateien benötigen, um dieses Juwel erstellen zu können.

Ryan Oberoi
quelle
2

Ich hatte Probleme, meine Konfiguration nach der Installation von Schneeleopard zum Laufen zu bringen. Ich habe MAMP unter http://www.mamp.info gefunden und es bündelt Apache, PHP und MySQL. Sie installieren es wie eine Anwendung und es funktioniert einfach. Vielleicht lohnt es sich, es auszuprobieren, und es ist kostenlos.

Gittergewebe


quelle
1

Ich dachte, ich würde hier meine eigene Frage beantworten. Es scheint, als ob das Problem nicht in MySQL liegt, sondern in den MySQL-Ruby-Bindungen. Ich habe das herausgefunden, weil es eine Verbindung herstellen konnte, als ich Querius (meine MySQL-GUI) angeschlossen habe.

So erstellen Sie die Bindungen aus dem Quellcode:

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

Es gibt viele Bibliotheken, die ich aus der Quelle auf Snow Leopard bauen muss, und sie tauchen immer wieder auf. MacPorts scheint nicht für alle Bibliotheken aktualisiert zu sein, also mache ich es alleine. Als nächstes: freetype ( http://download.savannah.gnu.org/releases-noredirect/freetype/ )

coneybeare
quelle
1

Ich hatte das gleiche Problem und hier ist, was für mich funktioniert hat.

  1. Installieren Sie Snow Leopard und das 64-Bit-MySQL-DMG.

  2. Erstellen Sie /etc/my.cnf, um auf mein vorheriges MySQL-Datenverzeichnis (wie hier beschrieben ) zu verweisen, und führen Sie es aus

    sudo mysql_upgrade.

  3. Öffnete IRB und installiere alle meine Edelsteine ​​neu mit (via blog.costan.us/2009/07/rebuild-your-ruby-gems-if-you-update-to.html).

    `gem list`.each_line {| line | System 'sudo gem install # {line.split.first}'}

  4. Deinstallierte die von mir installierten MySQL-Gems.

  5. Installiertes MySQL-Juwel mit

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

Damit scheint bisher alles zu funktionieren. * Holz klopfen *


quelle
Dies ist auf einem MacBook Pro (Pre-Unibody) Core 2 Duo 2,4 GHz mit 4 GB oder RAM
Haben Sie in 64 oder 32-Bit gestartet?
Jaryl
1

Für den Fall, dass Sie lieber zu Hause brauen , anstatt MySQL manuell zu installieren.

Deinstallieren Sie das vorhandene MySQL-Juwel (falls vorhanden):

 sudo gem uninstall mysql 

Suchen Sie die Datei 'mysql_config':

 find /usr -name 'mysql_config' 

Installieren Sie mysql gem neu:

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

Hinweis: Ersetzen Sie ihn /usr/local/bin/durch den entsprechenden mysql_configPfad in Schritt 2. Auch in meinem Blog .

Oh ho
quelle
1

Ian Selby Danke viel , aber ich hatte das entfernen sudovon vorsudo env ARCHFLAGS="-arch x86_64" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config

Ich habe ein Gemset installiert und verwende rvm, das Sie meiner Meinung nach auffordert, das Schlüsselwort sudo nicht zu verwenden. Vielen Dank.

Ricky McMillen
quelle
1

Ich habe es so gelöst:

  1. Nach der Installation der DMG-Datei von MySQL  
  2. Bundle config build.mysql --with-mysql-config = / usr / local / mysql / bin // mysql_config
  3. env ARCHFLAGS = "- arch x86_64"
  4. Bundle installieren
surajit dey
quelle
1

Nachdem ich einige Jahre eine Pause von Rails gemacht hatte, verbrachte ich nur einige Zeit damit, meine Entwicklungsumgebung einzurichten. Ich dachte also, ich würde ein Tutorial erstellen, wie man die neueste Version von Rails 3, MySQL und RVM auf SnowLeopard installiert, um hoffentlich anderen Zeit zu sparen, die in meiner Position sind.

Es funktioniert ab dem 21. August 2011 mit Rails 3.0.10, MySQL 5.5.15 und RVM 1.7.2. Es sollte mit zukünftigen Versionen von Rails 3.0.x, MySQL 5.5.x und RVM 1.7.x funktionieren.

  1. Installieren Sie XCode, falls noch nicht installiert. Ich habe 4.0.2 verwendet. Leider wurde dies jetzt von Apple zurückgezogen, ist aber möglicherweise an anderer Stelle im Internet verfügbar. Version 3.2.x kann kostenlos von Apple heruntergeladen werden, aber ich habe es mit diesem Tutorial nicht getestet, es funktioniert wahrscheinlich auch.

  2. Installiere 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. Installieren Sie eine Version von Ruby (z. B. 1.9.2) in rvm. Hier finden Sie grundlegende Anweisungen zur Verwendung .

    user$ rvm install 1.9.2
    user$ rvm use 1.9.2
    
  4. Erstellen Sie ein Gemset für den in Schritt 2 installierten RVM-Ruby (x ist die Versionsnummer).

    user$ rvm gemset create rails30x
    user$ rvm 1.9.2@rails30x
    
  5. Installieren Sie Rails 3.0.x (x ist die Versionsnummer).

    user$  gem install rails -v 3.0.x.
    
  6. Laden Sie das MySQL 5.5.x-Paket, das Startelement und den Einstellungsbereich herunter und installieren Sie es . Alle drei sind in der DMG-Installationsdatei enthalten. Installieren Sie auch MySQL WorkBench.

    Suchen Sie nach / usr / local / mysql-version-name / support-files (fügen Sie den richtigen MySQL-Verzeichnisnamen ein) und bearbeiten Sie mysql.server (mit Root-Rechten). Suchen Sie um die Zeile 46 herum die Zeilen mit der Aufschrift:

    basedir=
    datadir=
    

    und ändern Sie sie in Lesen (Einfügen des richtigen MySQL-Verzeichnisnamens):

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

    Speicher die Datei. MySQL kann jetzt über den Einstellungsbereich gestartet werden.

    Installieren Sie den Edelstein mysql2, damit Rails 3 MySQL verwenden kann (siehe nächster Schritt). Zunächst müssen Sie festlegen DYLD_LIBRARY_PATH, dass das MySQL-Bibliotheksverzeichnis enthalten ist. Bearbeiten Sie dazu Ihr ~ / .bash_profile in Ihrem Home-Ordner und fügen Sie Folgendes hinzu (geben Sie den richtigen MySQL-Verzeichnisnamen ein):

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

    Ohne die Aufnahme des Verzeichnisses in DYLD_LIBRARY_PATH würde eine Meldung angezeigt, dass die Bibliothek nicht gefunden wurde, und der Server würde abgebrochen.

  7. Installiere den mysql2Edelstein. (Ab Mai 2011 ist Version 0.2.7 die neueste Arbeitsversion mit Rails 3.0.x).

    user$ gem install mysql2 -v 0.2.7 
    
  8. Erstellen Sie eine Rails-App und die entsprechende Datenbank (appname_development).

    user$ rails new appname
    
  9. Fügen Sie dies dem Gemfile der App hinzu: gem 'mysql2', "0.2.7"

  10. Fügen Sie dies der database.yml der App hinzu:

    development: 
      adapter: mysql2
      encoding: utf8
      reconnect: false
      database: appname_development
      pool: 5
      username: username
      password: pwd
      host: localhost
    
  11. Starten Sie die App und aktivieren Sie "Informationen zur Umgebung Ihrer Anwendung". Alles sollte richtig funktionieren.

MikeD
quelle
Willkommen bei Stack Overflow. Netter Führer hier. (Ich habe die Formatierung ein wenig aktualisiert.)
Paŭlo Ebermann
In einigen Fällen schafft RVM dieses Problem
New Alexandria
1

Die Anweisungen zum Setzen von ARCHFLAGS und zum Übergeben von --mysql-config = ... schienen nicht genug zu sein, um dies für mich auf Snow Leopard zu lösen. Zusätzlich dazu habe ich hinzugefügt:

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

zu meinem Bash-Profil, und das löste es für mich.

bratsche
quelle
0

Ich habe den Archflags-Trick viele Male mit geringfügigen Abweichungen ausprobiert, aber er hat bei mir nie funktioniert.

Was schließlich tat Arbeit wurde auf die Version von Rubin und Perle mit Schneeleopard installiert Schalt zurück.

Ich hatte meine eigene Version gebaut und installiert, die in jeder Hinsicht für mich funktioniert hat, außer dieser. Da alles andere gut zu funktionieren scheint, kann ich nicht anders, als zu erraten, dass das MySQL-Plugin einige funky Annahmen enthält. Wie auch immer, alles was ich getan habe war switch / usr / bin, um wieder der Erste auf meinem Weg zu sein. Ich hatte Ruby in /usr/local/ruby-1.8.7 und /usr/local/ruby-1.9.1 installiert, um einfach wechseln zu können. Ich dachte, ich würde es erwähnen, da die Archflags-Lösung für viele Menschen zu funktionieren scheint, aber nicht für alle.

Ian
quelle
0

Ich habe das Programm mysql_config von $ MYSQL_HOME / bin in etwas anderes umbenannt, damit das Konfigurationsskript des Gem-Installationsprogramms es nicht finden kann. Obwohl ich die Option libs verwendet habe, hat das Gem-Installationsprogramm immer die Kompilierungseinstellungen aus meiner MySQL-Installation verwendet, die fett binär ist. Die Standard-Ruby-Installation ist jedoch nur x86_64 und daher schlägt die Kompilierung des Gems fehl. Nach dem Umbenennen des Programms mysql_config funktionierte der folgende Befehl einwandfrei und installierte das Juwel:

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

Wenn Sie das MySQL-Juwel mit RVM installieren, müssen Sie den folgenden Code verwenden, um es zu installieren

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

Diese Methode hat bei mir in Leopard Server funktioniert, keine der oben genannten Methoden hat funktioniert

Ganar
quelle
0

Dieser Artikel hat das Problem für mich gelöst :)

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

  • Vor Leopard

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

    • Leopard auf einer PPC-Maschine:

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

    • Leopard auf einer Intel-Maschine:

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

    • Schneeleopard (nur bei Intel):

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

Bijan
quelle