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.


domenica 16 ottobre 2011

Installazione di Ruby via RVM

Per agevolare l'installazione dell'ambiente di sviluppo/runtime e' stato creato un tool molto utile, che facilita il procedimento.

Tramite RVM e' possibile scaricare e installare Ruby nelle varie versioni e soprattutto switchare in modo semplice dall'una all'altra.

Per installare RVM lanciare (vedere le istruzioni per installazioni MultiUser):
bash < <(curl -s https://rvm.beginrescueend.com/install/rvm)
aggiungere poi la riga nel .bash_profile in modo da poter sfruttare rum da shell :

echo '[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" ' >> ~/.bash_profile
 a questo punto l'installazione e' terminata, quindi tramite :
rvm install (esempio : rvm install 1.9.2)
si esegue l'installazione di una nuova versione di ruby.

Per usare una versione si usa : rvm use
Per impostare una versione come default : rvm --default
Se si desiderare tornare alla versione installata con il sistema usare : rum system
Se si desiderare tornare alla versione di default usare : rvm default

MAC OSX Lion, problemi con Mysql da Ruby

Con riferimento al post del 3 aprile 2011, probabilmente dopo l'aggiornamento di Snow leopard a Lion, una serie di problemi tra Mysql e Ruby si sono ripresentati, questa volta in un'altra forma.

  Status: 500 Internal Server Error
  uninitialized constant MysqlCompat::MysqlRes

    /Library/Ruby/Gems/1.8/gems/activesupport-2.3.11/lib/active_support/dependencies.rb:466:in `load_missing_constant'
    /Library/Ruby/Gems/1.8/gems/activesupport-2.3.11/lib/active_support/dependencies.rb:106:in `const_missing'
    /Library/Ruby/Gems/1.8/gems/activerecord-2.3.11/lib/active_record/connection_adapters/mysql_adapter.rb:9:in `define_all_hashes_method!'
    /Library/Ruby/Gems/1.8/gems/activerecord-2.3.11/lib/active_record/connection_adapters/mysql_adapter.rb:68:in `mysql_connection'
per poter risolvere il problema ho lanciato i comandi (simile a quello del post precedente) :
sudo gem uninstall mysql
sudo env ARCHFLAGS="-arch x86_64" gem install mysql -v 2.7 -- --with-mysql-config=/usr/local/mysql/bin/mysql_config

malgrado questi un'ulteriore errore e' apparso :

  dlopen(/Library/Ruby/Gems/1.8/gems/mysql-2.7/lib/mysql.bundle, 9): Library not loaded: libmysqlclient.18.dylib
  Referenced from: /Library/Ruby/Gems/1.8/gems/mysql-2.7/lib/mysql.bundle
  Reason: image not found - /Library/Ruby/Gems/1.8/gems/mysql-2.7/lib/mysql.bundle
    /Library/Ruby/Gems/1.8/gems/mysql-2.7/lib/mysql.bundle
    /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rubygems/custom_require.rb:36:in `require'
    /Library/Ruby/Gems/1.8/gems/activesupport-2.3.11/lib/active_support/dependencies.rb:182:in `require'
per risolvere questo problema e' stato necessario lanciare :

sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /Library/Ruby/Gems/1.8/gems/mysql-2.7/lib/mysql.bundle
sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /Library/Ruby/Gems/1.8/gems/mysql-2.7/mysql.bundle

con questi passi il problema e' stato risolto.

domenica 3 aprile 2011

MAC OSX problemi con Mysql

Nel processo di spostamento da applicazioni sviluppate su Windows per portarle su MAC OSX, mi sono imbattuto nel ripristinare il funzionamento di varie applicazioni sviluppate in Ruby on Rails con Mysql.

Il primo problema che ho incontrato che non e' presente la Gem di Mysql, quindi il primo punto e' stato eseguire il "gem install" che pero' occorre lanciarlo in una particolare modalita'
sudo env ARCHFLAGS="-arch x86_64" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config
a questo punto cercando di lanciare i comandi rake per la creazione del DB (rake db:create:all, rake db:migrate, rake db:seed etc..) incorrevo nell'errore :
uninitialized constant ActiveSupport::Dependencies::Mutex (NameError)
Questo problema e' risolvibile aggiungendo sul file boot.rb il require :
require 'thread'
non volevo pero' aggiungere un comando su un file che in teoria non andrebbe cambiato, quindi ho cercato altre soluzioni.
Ho aggiornato la gem rails da 2.3.5 a 2.3.11, tramite :
gem install rails -v 2.3.11
Cambiato il file environment.rb per utilizzare tale versione e aggiornata l'applicazione tramite :
rake rails:update
Malgrado questo il modulo mysql non funziona ancora e' stato necessario impostare una variabile di ambiente tramite :
export DYLD_LIBRARY_PATH=/usr/local/mysql/lib 


a questo punto tutto funziona, ricevo un NOTE di qualcosa che e' diventato deprecato ma tutto funziona.

SourceIndex.new(hash) is deprecated; From /Library/Ruby/Gems/1.8/gems/rails-2.3.11/lib/rails/vendor_gem_source_index.rb:100:in `new'.