csiszarattila.com / Rubysztán

MySQL Gem telepítése OSX 10.4.11(Tiger) alá

Mi tegyünk ha a Rails(2.1) logjában ilyen üzenetekkel találkozunk:

DEPRECATION WARNING: You're using the Ruby-based MySQL library that ships with Rails. This library will be REMOVED FROM RAILS 2.2. Please switch to the offical mysql gem: `gem install mysql`  See http://www.rubyonrails.org/deprecation for details. (called from mysql_connection at /usr/local/lib/ruby/gems/1.8/gems/activerecord-2.1.1/lib/active_record/connection_adapters/mysql_adapter.rb:81)

A MySQL adatbáziskezelő pedig már nem is használható a Rails 2.2-es verziójától a MySQL Gem megléte nélkül.

A Ruby ugyanis bár rendelkezik a maga kis mysql lib-implementációjával, csakhogy a MySQL-es fiúk sem pihentek és kiadták a saját verziójukat, ami jóval gyorsabb. A Rails tehát szeretné ezt használni.

Telepítés Gemként

sudo gem install mysql

De a gem csak nem fordul mivel explicit meg kell adnunk a mysql-dev fájlok - C header fájlok - helyét. Próbálkozzunk a mysql helyének a megadásával:

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

Csak nem jó, bővebben:

sudo gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config

Majdnem, csak ekkor a fordítás elszáll ezzel:

mysql.c: In function 'Init_mysql':
mysql.c:2015: error: 'ulong' undeclared (first use in this function)

De úgy tűnik nem vagyunk ezzel egyedül, mivel itt olvashatunk egy lehetséges megoldást. A probléma részletesen.

Próbáljuk meg magunk fordítani, azzal, hogy előbb lépjünk be a usr/local/lib/ruby/gems/1.8/gems/mysql-2.7/ könyvtárba, majd adjuk hozzá a következő sort a mysql.c fájlhoz:
#define ulong unsigned long

Majd fordítsuk manuálisan:

sudo ruby ./exconf.rb --with-mysql-config=/usr/local/mysql/bin/mysql_config
sudo make

Tesztelés: Nos, mint azt az elsőként linkelt bejegyzés írója is írja, nem fut le a ./test.rb. Rossz felhasználóval akar csatlakozni. A fájlokat vizsgálva kiderül, hogy nem veszi át a paramétereket. Manuálisan beillesztve a paraméteket(host,user,pass) működik, csak pár teszt hasal el; long, meg bináris konverziókon, gondolom ez architektúrális probléma, ettől még mennie kell...

Telepítés:

sudo make install

Ha a Rails és a Ruby tovább panaszkodna, hogy nem találja a gem-et próbáljuk meg a következőt:

/usr/bin/install -c -m 0755 mysql.bundle /usr/local/lib/ruby/site_ruby/1.8/i686-darwin8.11.1

Ellenőrzés:

irb
irb(main):001:0>require 'mysql' => true