Forum: JRuby rake db:migrate failing against oracle

Posted by Cris Shupp (cshupp)
on 2013-02-01 02:15
Hello All --

I am using jruby 1.6.7.2 with rails 3.2.11 to create a brown bag for
several other developers. I cannot get the migration to work to save my
life...

In my database yaml file I have the following:
---
development:
  adapter: jdbc
  driver: oracle.jdbc.driver.OracleDriver
  url: jdbc:oracle:thin:@localhost:1521:xe
  username: brownbag
  password: brownbag
  pool: 500
---

When I run:
---
rake db:create --trace
** Invoke db:create (first_time)
** Invoke rails_env (first_time)
** Execute rails_env
** Invoke db:load_config (first_time)
** Execute db:load_config
** Execute db:create
---

when I run:
---
C:\temp\brownbag\my_workout>rake db:migrate --trace
** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
** Invoke db:load_config (first_time)
** Execute db:load_config
** Execute db:migrate
rake aborted!
Table schema_migrations does not exist
arjdbc/jdbc/RubyJdbcConnection.java:126:in `columns'
c:/temp/brownbag/gem_home/gems/activerecord-jdbc-adapter-1.2.5/lib/arjdbc/oracle/adapter.rb:358:in
`ora_columns'
c:/temp/brownbag/gem_home/gems/activerecord-3.2.11/lib/active_record ...
----

If I switch my databse.yml file to the original slite3 that rails auto
generates all is fine.

If I place the following in irb:

---
require 'rubygems'
require 'activerecord-jdbc-adapter'
require 'active_record'
require 'active_record/version'

a= ActiveRecord::Base.establish_connection(
   :adapter => 'jdbc',
   :driver => 'oracle.jdbc.driver.OracleDriver',
   :url => 'jdbc:oracle:thin:@localhost:1521:xe',
   :username=>'brownbag',
   :password=>'brownbag'
 )

c = a.connection
ct = "CREATE TABLE example (id INT, data VARCHAR(100) )"
d = c.exec_query(ct)
---

The table is created as expected!

Help!

Thanks,

Cris
Posted by Keith B. (keith_b)
on 2013-02-01 03:54
(Received via mailing list)
Chris -

I don't know the reason, but here's a possible workaround:

The error reported says that the schema_migrations table does not exist. 
What if you couuld create that table manually?  In SQLite, the commands 
executed appear to be:

CREATE TABLE "schema_migrations" ("version" varchar(255) NOT NULL);
CREATE UNIQUE INDEX "unique_schema_migrations" ON "schema_migrations" 
("version");

I wonder if you do the equivalent in Oracle, if the rest of it will 
succeed.

- Keith
Posted by Cris Shupp (cshupp)
on 2013-02-01 04:28
Keith,

Thanks for your reply. I  will try it tomorrow.

 I suspect it will work because my coding partner had me try it. He did 
not get the table  (schema_migrations) quite right so it failed but it 
failed complaining about the malformed table.

Obviously, in a brown bag scenario, such a solution will not work.  It 
would utterly destroy the Rails magic mojo...

Cris
Posted by Hassan Schroeder (Guest)
on 2013-02-01 04:37
(Received via mailing list)
On Thu, Jan 31, 2013 at 5:15 PM, Cris Shupp <lists@ruby-forum.com> 
wrote:

>   adapter: jdbc
>   driver: oracle.jdbc.driver.OracleDriver

Ewww. Luckily, I no longer have to deal with Rails and Oracle -- my
experience with that combination was not pleasant -- but you might
want to try using <https://github.com/rsim/oracle-enhanced> as your
adapter.

HTH,
--
Hassan Schroeder ------------------------ hassan.schroeder@gmail.com
http://about.me/hassanschroeder
twitter: @hassan
Posted by Keith B. (keith_b)
on 2013-02-01 05:12
(Received via mailing list)
Chris -

A couple of other things that may help, though to be honest I'm stabbing 
in the dark

1) In my article about using Oracle with JRuby and Rails 
(http://www.bbs-software.com/blog/2013/01/09/using-...), 
I had the following line in my database.yml, which was slightly 
different from yours (I don't know if they're both correct, or if even 
I'm wrong, but I'm pretty sure it worked for me):

  driver: oracle.jdbc.OracleDriver

2) There have been some problems with the activerecord-jdbc-adapter gem. 
As far as I know, the last version that worked correctly with other gems 
was 1.2.2.1.  It's probably a lot more complex than that, but I don't 
know the details.  You might want to try setting that version in your 
Gemfile and see if it helps.

- Keith

---
Keith R. Bennett
http://about.me/keithrbennett
Posted by Manuel Ramos (Guest)
on 2013-02-01 09:41
(Received via mailing list)
Maybe a role problem on Oracle Db....??? Try a Dba user...
El 01/02/2013 02:16, "Cris Shupp" <lists@ruby-forum.com> escribi:
Posted by Felix Gilcher (Guest)
on 2013-02-01 09:45
(Received via mailing list)
Have you tried running rake db:schema:load or rake db:create first? 
Those tasks should create the migration schema tables.



On Feb 1, 2013, at 9:38 AM, Manuel Ramos wrote:

> ---
> ---
> ---
> 
c:/temp/brownbag/gem_home/gems/activerecord-jdbc-adapter-1.2.5/lib/arjdbc/oracle/adapter.rb:358:in
> require 'rubygems'
>  )
> Thanks,
>
>

--
Felix Gilcher
Geschftsfhrer

m. +49 172 840 88 28

asquera GmbH
Ohlauer Strae 43
D-10999 Berlin

AG Charlottenburg, HRB 140808 B
Geschftsfhrung: Felix Gilcher, Florian Gilcher
Posted by Cris Shupp (cshupp)
on 2013-02-01 17:19
Update:

Tried 1.2.2.1 with and w/o 'driver' in 'driver: 
'oracle.jdbc.driver.OracleDriver'

The result was the same in each case...

rake db:migrate --trace
** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
** Invoke db:load_config (first_time)
** Execute db:load_config
** Execute db:migrate
rake aborted!
Table schema_migrations does not exist
arjdbc/jdbc/RubyJdbcConnection.java:121:in `columns'
c:/temp/brownbag/gem_home/gems/activerecord-jdbc-adapter-1.2.2.1/lib/arjdbc/oracle/adapter.rb:348:in 
`ora_columns'

I tried the enhanced driver and it worked!  For anyone else following my 
footsteps, for clarity, here is what I did:

Gemfile add:
#gem 'activerecord-jdbc-adapter', '1.2.2.1'
gem 'activerecord-oracle_enhanced-adapter', '~> 1.4.0'

database.yml add:

development:
  adapter: oracle_enhanced
  host: localhost
  port: 1521
  database: xe
  username: brownbag
  password: brownbag
#development:
#  adapter: jdbc
#  driver: oracle.jdbc.OracleDriver
#  url: jdbc:oracle:thin:@localhost:1521:xe
#  username: brownbag
#  password: brownbag

rake db:migrate --trace
** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
** Invoke db:load_config (first_time)
** Execute db:load_config
** Execute db:migrate
==  CreateExercises: migrating 
================================================
-- create_table(:exercises)
   -> 1.0470s
==  CreateExercises: migrated (1.0470s) 
=======================================

** Invoke db:_dump (first_time)
** Execute db:_dump
** Invoke db:schema:dump (first_time)
** Invoke environment
** Invoke db:load_config
** Execute db:schema:dump


YAY!!

Now if I switch back to the other adapter and make use of the fact that 
it got my schema_migrations in there for me it dose 'work'.

I will be using the enhanced driver.

Thank you Keith and Hassan!

BTW I am currently using the activerecord-jdbc-adapter against oracle in 
our production app.  It tookwaaay too much effort to make it work there. 
Effort that would destroy a brown bag.  As in, "Now manually patch the 
driver like so..."

I am surprised such a fundamental driver has such issues with such a 
large database.

Thanks all,

Cris
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.