$ sudo apt-get install firebird2.1-dev
$ sudo gem install fb
$ sudo gem install fb_adapter
O nome do adapter é 'fb'. Para criar registros, é necessário ter um generator com o nome
#{table_name}_seq
Não testei com migrations, então não sei se um create_table
também criaria o generator.Tentei usar o recurso de alias do Firebird e não funcionou aqui. Só com o caminho completo até o banco do Firebird.
Tanto o fb (acesso a Firebird com Ruby) quanto fb_adapter (adaptador de Firebird para Rails) estão disponíveis em http://github.com/rowland.
OBS: Caso esteja tendo problemas com o uso desta gem, leia os comentários.
Oi Rodrigo,
ResponderExcluirSegui suas dicas e instalei as duas gems fb e fb_adapter.
Porém, sempre que tento recuperar um objeto do banco recebo o seguinte erro:
ActiveRecord::StatementInvalid: Fb::Error: Invalid token
Dynamic SQL Error
SQL error code = -104
Token unknown - line 1, column 15
"TBPROD"
: SELECT * FROM "TBPROD" ,
from /Library/Ruby/Gems/1.8/gems/activerecord-2.3.8/lib/active_record/connection_adapters/abstract_adapter.rb:221:in `log'
from /Library/Ruby/Gems/1.8/gems/fb_adapter-0.6.0/lib/active_record/connection_adapters/fb_adapter.rb:307:in `log'
from /Library/Ruby/Gems/1.8/gems/fb_adapter-0.6.0/lib/active_record/connection_adapters/fb_adapter.rb:312:in `select_all'
from /Library/Ruby/Gems/1.8/gems/fb_adapter-0.6.0/lib/active_record/connection_adapters/fb_adapter.rb:299:in `translate'
from /Library/Ruby/Gems/1.8/gems/fb_adapter-0.6.0/lib/active_record/connection_adapters/fb_adapter.rb:311:in `select_all'
from /Library/Ruby/Gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:664:in `find_by_sql'
from /Library/Ruby/Gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:1578:in `find_every'
from /Library/Ruby/Gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:618:in `find'
from /Library/Ruby/Gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:638:in `all'
from (irb):3
Você tem alguma sugestão?
Obrigado.
Olá Nielson,
ResponderExcluirSe eu bem me lembro, estes drivers aparentemente só funcionam com o dialeto 3 do Firebird. Quando tentei usar com bancos no dialeto 1, obtive um erro semelhante ao seu.
Em troca de e-mails, o Nielsom Rolim encontrou uma solução para o problema caso não seja possível usar um banco com o dialeto 3. Transcrevo abaixo a solução:
ResponderExcluir--------------
Oi Rodrigo,
Descobri onde estava o erro.
O problema era a formação da query SQL. O ActiveRecord adiciona aspas duplas ao nome da tabela. Isso tava causando erro no Firebird, pois ele não aceita essas aspas.
A query SELECT * FROM TBPROD funciona, mas SELECT * FROM "TBPROD" dá o erro que falei antes.
A solução que encontrei (não sei se é a melhor) foi editar o fb_adapter.rb (C:\Ruby\lib\ruby\gems\1.8\gems\fb_adapter-0.6.0\lib\active_record\connection_adapters\fb_adapter.rb) e alterar o método quote_column_name na classe FBAdapter.
Mudei de:
def quote_column_name(column_name) # :nodoc:
#%Q("#{ar_to_fb_case(column_name.to_s)}")
end
Para:
def quote_column_name(column_name) # :nodoc:
ar_to_fb_case(column_name.to_s)
end
Com essa alteração resolvi o problema.
-------------
Agradeço ao Nielsom pelas informações. É assim que a comunidade evolui!