Hoje bati com um probleminha ao tentar iniciar um aplicativo Rails 3.1.x sobre Ruby 1.9.3-p0 com a gem MySQL2 no meu Mac OS X Lion.

Resumindo, é possível que você esbarre com o seguinte erro:

1
2
3
4
5
6
7
8
9
dyld: lazy symbol binding failed: Symbol not found: _mysql2_set_field_string_encoding
  Referenced from: /Users/akitaonrails/.rvm/gems/ruby-1.9.3-p0/gems/mysql2-0.3.7/lib/mysql2/mysql2.bundle
  Expected in: flat namespace

dyld: Symbol not found: _mysql2_set_field_string_encoding
  Referenced from: /Users/akitaonrails/.rvm/gems/ruby-1.9.3-p0/gems/mysql2-0.3.7/lib/mysql2/mysql2.bundle
  Expected in: flat namespace

Trace/BPT trap: 5

Esse problema foi reportado como bug no projeto do MySQL2 com o número #216. O criador e mantenedor da gem, Brian Mario já fez um commit com a correção, basicamente a mudança é esta:

1
2
3
-inline VALUE mysql2_set_field_string_encoding(VALUE val, MYSQL_FIELD field, rb_encoding *default_internal_enc, rb_encoding *conn_enc) {
          142        
+static VALUE mysql2_set_field_string_encoding(VALUE val, MYSQL_FIELD field, rb_encoding *default_internal_enc, rb_encoding *conn_enc) {

Se quiser usar esta correção, modifique seu Gemfile declarando a gem mysql2 da seguinte maneira:

1
gem "mysql2", "~> 0.3.7", :git => "git://github.com/brianmario/mysql2.git", :ref => "d3a96b8"

O Brian ainda não lançou uma nova versão da gem com a correção por isso podemos baixar diretamente do repositório no Github.

Para atualizar execute bundle update mysql2. Isso deve resolver esse problema.

comentários deste blog disponibilizados por Disqus