Trying to get Rails working with Sybase ASE

Hi

I’m trying to use the activerecord-sybase-adapter to be able to use ASE with my rails applications. But, I am struggling…

I followed (most of) the steps on this informative page: http://trevoke.net/blog/2009/09/11/connecting-to-sybase-with-rails-on-windows-xp/

Initially I had Rails 2.3.5 installed. I copied the “Ruby Sybase files” as instructed and the Sybase dll files as well, and I installed activerecord-sybase-adapter (1.0.0.9250). The Sybase environment I already have on my office computer, so it should be allright. I don’t have the mentioned JDBC_HOME setting or the classpath setting, but I’m using Open Client, so should there be any need for the JDBC settings?

Ok, things looked promising, and I started creating a test rails app.

rails testapp

I then edited the database.yml to fit Sybase ASE development: adapter: sybase database: testdb username: username password: password host: sauron

The host, sauron, is defined in the sql.ini file.

Running rake db:create tells me that the database testdb already exists. (true)

ruby script\generate scaffold person first_name:string last_name:string WORKS OK rake db:migrate --trace FAILS!

(in C:/work/ror/testapp) ** Invoke db:migrate (first_time) ** Invoke environment (first_time) ** Execute environment ** Execute db:migrate rake aborted! undefined method `select_rows’ for #ActiveRecord::ConnectionAdapters::SybaseAdapter:0x97d8be8

c:/prg/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/connection_adapters/abstract/database_statements.rb:27:in select_values' c:/prg/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/migration.rb:416:in get_all_versions’

c:/prg/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/migration.rb:532:in migrated' c:/prg/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/migration.rb:441:in current_version’

c:/prg/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/migration.rb:458:in migrate' c:/prg/ruby/lib/ruby/gems/1.8/gems/rails-2.3.5/lib/tasks/databases.rake:115:in detect’ c:/prg/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/migration.rb:458:in `each’

c:/prg/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/migration.rb:458:in detect' c:/prg/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/migration.rb:458:in migrate’ c:/prg/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/migration.rb:400:in `up’

c:/prg/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/migration.rb:383:in migrate' c:/prg/ruby/lib/ruby/gems/1.8/gems/rails-2.3.5/lib/tasks/databases.rake:116 c:/prg/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:636:in call’

c:/prg/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:636:in execute' c:/prg/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:631:in each’ c:/prg/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:631:in `execute’

c:/prg/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:597:in invoke_with_call_chain' c:/prg/ruby/lib/ruby/1.8/monitor.rb:242:in synchronize’ c:/prg/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:590:in `invoke_with_call_chain’

c:/prg/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:583:in invoke' c:/prg/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2051:in invoke_task’ c:/prg/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `top_level’

c:/prg/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in each' c:/prg/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in top_level’ c:/prg/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2068:in `standard_exception_handling’

c:/prg/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2023:in top_level' c:/prg/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2001:in run’ c:/prg/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2068:in `standard_exception_handling’

c:/prg/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:1998:in run' c:/prg/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/bin/rake:31 c:/prg/ruby/bin/rake:19:in load’ c:/prg/ruby/bin/rake:19

so… looks like something’s missing here. In mysql_adapter.rb there is a select_row function, but not in the sybase_adapter.rb.

I tried downgrading Rails to 2.1.0 because I read somewhere that the activerecord-sybase-adapter perhaps was not working for the latest Rails releases, but got only a slightly different error message: rake aborted! select_rows is an abstract method c:/prg/ruby/lib/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/connection_adapters/abstract/database_statements.rb:34:in `select_rows’

Anyone has an idea?

Best regards, Rolf

For anyone interested in this topic, see this thread:

http://groups.google.com/group/ruby-on-rails-sybase-developers/browse_thread/thread/1eca62c3578cdf34?hl=en

Best regards, Rolf