mercoledì 31 ottobre 2012

ARC forbids explicit message send of 'dealloc'

Molte volte capita di dover usare librerie di terze parti (o proprie), che non sono predisposte alla compilazione tramite ARC (Automatic Reference Counting), quindi se il tuo progetto invece lo prevede si verifichera' un errore di questo tipo :
ARC forbids explicit message send of 'dealloc'
Per far conciliare le due gestioni della memoria, e' possibile impostare il flag di disabilitazione di ARC per i sorgenti della libreria importata, andando in "Target" -> "Build Phases" -> "Compile Sources" e impostare come "Compiler Flags" l'opzione :
-fno-objc-arc

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.

venerdì 18 maggio 2012

gem install json in errore con osx Lion

Dopo essere passato a Lion e installato la versione 4.2 di Xcode, rimuovendo la precedente 3.2.6, non si riesce più a eseguire il "bundle install" durante la creazione di nuovi progetti Rails.

In particolare il problema si manifesta durante l'installazione della Gem di Json, che probabilmente ha bisogno di una compilazione nativa.

Dopo un po' di verifiche e rierche, la soluzione da adottare, e'

  • Installare Xcode 4.2
  • In Xcode da Preference -> Download, installare i "command line tool" (180 mb) 

A questo punto in /usr/bin e' presente il gcc, che e' un Symbolic Link a llvm-gcc-4.2.

Rieseguendo il bundle install continua a non funzionare, dato che cerca il file /usr/bin/gcc-4.2, ho risolto creato un altro symbolic link :
sudo ln -s llvm-gcc-4.2 gcc-4.2

a questo punto eseguendo l'installazione singola della Gem (occorre usare sudo) :
sudo gem install json -v 1.7.3

Viene compilato correttamente e anche il bundle install termina correttamente.