venerdì 27 luglio 2012

Problema db:migrate con mysql2

All'esecuzione di rake db:migrate si verifica questo errore :


rake aborted!
An error has occurred, all later migrations canceled:
undefined method `rows' for nil:NilClass
Tasks: TOP => db:migrate
(See full trace by running task with --trace)
$ rake db:migrate --trace
** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
** Invoke db:load_config (first_time)
** Invoke rails_env (first_time)
** Execute rails_env
** Execute db:load_config
** Execute db:migrate
==  CreateSessions: migrating =================================================
-- create_table(:sessions)
   -> 0.1164s
==  CreateSessions: migrated (0.1165s) ========================================
rake aborted!
An error has occurred, all later migrations canceled:
undefined method `rows' for nil:NilClass
/Users/leobenelli/.rvm/gems/ruby-1.9.2-p290/gems/activesupport-3.1.1/lib/active_support/whiny_nil.rb:48:in `method_missing'
Come risultato viene creato l'oggetto del Migrate ma poi non riesce ad aggiungere, il punto di versione su schema_migrations.

Il problema e' dovuto ad un'incompatibilita' di versione della gem di Mysql2.

Con Rails 3.1.1, provate varie versioni del gem mysql2, tra le quali 0.2.7, 0.3.11, ma alla fine quella che mi ha funzionato e' la 0.3.7.
Quindi aggiunto nel Gemfile la riga :
gem 'mysql2', '0.3.7'

Problema db:migrate con Mysql2 parte 2

Un altro problema si e' presentato utilizzando Rails 3.1.1, con Mysql 5.5, con S.O. OSX

Al lancio del rake db:migrate, si verificava questo errore :

rake aborted!dlopen(/Users/leobenelli/.rvm/gems/ruby-1.9.2-p290/gems/mysql2-0.2.7/lib/mysql2/mysql2.bundle, 9): Library not loaded: libmysqlclient.18.dylib
  Referenced from: /Users/leobenelli/.rvm/gems/ruby-1.9.2-p290/gems/mysql2-0.2.7/lib/mysql2/mysql2.bundle
  Reason: image not found - /Users/leobenelli/.rvm/gems/ruby-1.9.2-p290/gems/mysql2-0.2.7/lib/mysql2/mysql2.bundle
La soluzione trovata e' di impostare una variabile la variabile di ambiente nel seguente modo :
export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH
a questo punto il la libreria viene trovata e il problema si risolve.

Si verifica pero' un altro errore spiegato al successivo post.