Forum: JRuby ActiveRecordError in 'columns' when working with Oracle

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
C8df37dbb25187a52bb55046019db00a?d=identicon&s=25 kaey-7 (Guest)
on 2009-04-15 18:18
(Received via mailing list)
I have deployed a jruby app in tomcat (5.5, JVM 1.5). The app runs fine
when
using a mysql db but with Oracle (10g) it apparently is not able to read
the
columns.

My database connection settings:
  adapter: jdbc
  driver: oracle.jdbc.driver.OracleDriver
  url: jdbc:oracle:thin:@(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST
=
myHost)(PORT = 1523)) (CONNECT_DATA =(SERVICE_NAME = mySID)))
  username: username
  password: password

I use Rails 2.1.0 (due to some other issue I had).

The error message is, unfortunately, not very detailled. I wonder if
this is
somehow connected to Oracle using capital letters for column names. I
tried
'table_exists?' and that returns true. Running 'columns' then produces
the
same error. I also tried for 'attribute_names' but I cannot create the
necessary instance. Any suggestions would be very much appreciated.

Here, now, is the error that I get:

ActiveRecord::ActiveRecordError in UploadsController#index

No message available

RAILS_ROOT: /opt/inst/apache/tomcat_5.5.26/webapps/coopapp/WEB-INF

Application Trace | Framework Trace | Full Trace

/opt/inst/tomcat/webapps/coopapp/WEB-INF/gems/gems/activerecord-2.1.0/lib/active_record/base.rb:1145:in
`columns'
/opt/inst/tomcat/webapps/coopapp/WEB-INF/gems/gems/activerecord-2.1.0/lib/active_record/base.rb:2598:in
`attributes_from_column_definition'
/opt/inst/tomcat/webapps/coopapp/WEB-INF/gems/gems/activerecord-2.1.0/lib/active_record/locking/optimistic.rb:55:in
`attributes_from_column_definition
/opt/inst/tomcat/webapps/coopapp/WEB-INF/gems/gems/activerecord-2.1.0/lib/active_record/base.rb:2126:in
`initialize'
app/controllers/uploads_controller.rb:71:in `index'
/opt/inst/tomcat/webapps/coopapp/WEB-INF/gems/gems/actionpack-2.1.0/lib/action_controller/base.rb:1162:in
`perform_action'
/opt/inst/tomcat/webapps/coopapp/WEB-INF/gems/gems/actionpack-2.1.0/lib/action_controller/filters.rb:580:in
`call_filters'
....

--
View this message in context:
http://www.nabble.com/ActiveRecordError-in-%27colu...
Sent from the JRuby - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/manage_email
C8df37dbb25187a52bb55046019db00a?d=identicon&s=25 kaey-7 (Guest)
on 2009-04-23 17:31
(Received via mailing list)
I am getting really desperate with this error. Will have to throw my
whole
Rails project away and do it all in Java if I cannot get this solved ...
bad
thing.
What I did in the meantime:
- Updating to jruby 1.2 and rails 2.2.2, activerecord-jdbc-adapter
(0.9.1).
All fine on my test system (same setting but mysql-db). Problem persists
with the Oracle 10g.
- Debugging jdbc - apparently no SQL-statement is being sent by
'myObject.columns', or the error occurs before that. General select
statements are successful: 'myObject.find(:all)'. It is only the columns
information that somehow cannot be read.
- Running a test with (ActiveRecord::Base)connection.execute("insert
into
extensions (ID, NAME) values ('1', 'pdf')") worked fine.

So, I wonder if there is anything left I can try:
Maybe provide the columns information by hand? But of what Class should
they
be? In my test system, running with MySQL, they are
ActiveRecord::ConnectionAdapters::MysqlColumn
Or run another adapter? But is there any alternative to jdbc? Even a bad
one?

Here is the stack trace I get after the latest changes (basically the
same
as before):

ActiveRecord::ActiveRecordError (No message available):

/opt/HRVE/tomcat/webapps/coopapp/WEB-INF/gems/gems/activerecord-2.2.2/lib/active_record/base.rb:1232:in
`columns'

/opt/HRVE/tomcat/webapps/coopapp/WEB-INF/gems/gems/activerecord-2.2.2/lib/active_record/base.rb:2851:in
`attributes_from_column_definition'

/opt/HRVE/tomcat/webapps/coopapp/WEB-INF/gems/gems/activerecord-2.2.2/lib/active_record/locking/optimistic.rb:55:in
`attributes_from_column_
definition_with_lock'

/opt/HRVE/tomcat/webapps/coopapp/WEB-INF/gems/gems/activerecord-2.2.2/lib/active_record/base.rb:2291:in
`initialize'
    /app/controllers/uploads_controller.rb:75:in `index'

/opt/HRVE/tomcat/webapps/coopapp/WEB-INF/gems/gems/actionpack-2.2.2/lib/action_controller/base.rb:1253:in
`perform_action'

/opt/HRVE/tomcat/webapps/coopapp/WEB-INF/gems/gems/actionpack-2.2.2/lib/action_controller/filters.rb:617:in
`call_filters'
--
View this message in context:
http://www.nabble.com/ActiveRecordError-in-%27colu...
Sent from the JRuby - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/manage_email
526d60de6472502bb570a9df2842b33b?d=identicon&s=25 Nick Sieger (Guest)
on 2009-04-23 20:12
(Received via mailing list)
On Thu, Apr 23, 2009 at 10:30 AM, kaey-7 <kt@jetaido.com> wrote:
> statements are successful: 'myObject.find(:all)'. It is only the columns
>
> Here is the stack trace I get after the latest changes (basically the same
> as before):
>
> ActiveRecord::ActiveRecordError (No message available):
>
> 
/opt/HRVE/tomcat/webapps/coopapp/WEB-INF/gems/gems/activerecord-2.2.2/lib/active_record/base.rb:1232:in
> `columns'

I haven't heard of anyone seeing this issue with Oracle before. We
have unit tests that are working that definitely are using the
#columns method and discovering columns, so I suspect something on
your end. How are you configuring the database?

Some things to try:
- Check your app's codebase to see if there happen to be any
conflicting methods named #columns or column_names in your models
- Do you get the same error if you run the app using Mongrel or Webrick?
- Do you get the same error in the Rails console?

Cheers,
/Nick

---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/manage_email
C10ea39c3fbe535ea1bf1d4eb4617900?d=identicon&s=25 Jay McGaffigan (Guest)
on 2009-04-23 21:37
(Received via mailing list)
Also are you using any reserved words in your schema
(http://wiki.rubyonrails.org/rails/pages/ReservedWords)?


On Thu, Apr 23, 2009 at 2:12 PM, Nick Sieger <nicksieger@gmail.com>
wrote:
>> 'myObject.columns', or the error occurs before that. General select
>> one?
> have unit tests that are working that definitely are using the
> /Nick
>
> ---------------------------------------------------------------------
> To unsubscribe from this list, please visit:
>
>    http://xircles.codehaus.org/manage_email
>
>
>

---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/manage_email
C8df37dbb25187a52bb55046019db00a?d=identicon&s=25 kaey-7 (Guest)
on 2009-04-24 13:14
(Received via mailing list)
Many thanks for your replies.

I had no columns method. I have written one now creating
ActiveRecord::ConnectionAdapters::Column objects. It is not an elegant
solution but it seems to help.
- There is no direct access to the Oracle db. It is a customer's system
and
all I have is an sqlplus connection.
- I deploy the app in a tomcat. There is no Rails environment there, so
no
console, other servers or anything. I test on a rather similar system,
however, and there everything is fine. Only difference is the database
(mysql).

The idea with the forbidden names is a good one. I actually have a
column
with the name "data". I need it for attachment_fu with :storage =>
:db_file.
Apparently, the table db_files must have a column of that name. Not sure
how
easily that can be modified. Then again, I would expect other users to
run
into the same problem. Does anybody run attachment_fu with db storage on
an
Oracle?


--
View this message in context:
http://www.nabble.com/ActiveRecordError-in-%27colu...
Sent from the JRuby - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/manage_email
13313ac2ec7ba7c43b1b952db034ff3b?d=identicon&s=25 Thomas E Enebo (Guest)
on 2009-04-24 17:18
(Received via mailing list)
One thing I would like to do for 0.9.2 is add
DatabaseMetadata.getSQLKeywords and probably also use
getIdentifierQuoteString() in some fashion to have generic keyword
protected and quoting logic for all adapters based on JDBC metadata.

-Tom

On Fri, Apr 24, 2009 at 5:53 AM, kaey-7 <kt@jetaido.com> wrote:
> console, other servers or anything. I test on a rather similar system,
>
>
>



--
Blog: http://www.bloglines.com/blog/ThomasEEnebo
Email: enebo@acm.org , tom.enebo@gmail.com

---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/manage_email
C8df37dbb25187a52bb55046019db00a?d=identicon&s=25 kaey-7 (Guest)
on 2009-04-29 12:51
(Received via mailing list)
Yesterday I finally got it all to work. I have modified the
attachment_fu to
work with a blob column with a different name (by modifying
attachment_fu/lib/technoweenie/attachment_fu/backends/db_file_backend.rb).
With the column name 'data' storing blob data into the db did not work.
The
manual column definition, however, was still necessary after that
change.
So, my definition of the DbFile model (which you need if you use
attachment_fu with :storage => db_file) looks like this:

class DbFile < ActiveRecord::Base
  def self.table_name()
    "my_db_files"
  end
  def self.columns()
    @columns = []
    @columns << ActiveRecord::ConnectionAdapters::Column.new("id", nil,
"int(30)")
    @columns << ActiveRecord::ConnectionAdapters::Column.new("mydata",
nil,
"blob")
    @columns
  end
end

Not elegant at all but it works.
Funny enough the table_name definition works only with Jruby. In my
development environment (Rails, Ruby, Mongrel) the table is still
expected
to be named in the standard of attachment_fu ('db_files'). So, maybe
this
class is not even read in this environment.
--
View this message in context:
http://www.nabble.com/ActiveRecordError-in-%27colu...
Sent from the JRuby - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/manage_email
E600c7ef201535348f7231f44f257c7d?d=identicon&s=25 Oliver Schwantje (oliverschwantje)
on 2009-05-15 14:11
We have the same problem with the columns-Method.
It works, if the table has no date-field. With a date-field
we get the same exception. If you can't reproduce the error,
it may be a problem of different nls_date_format-Parameters.


ciao
oliver
E600c7ef201535348f7231f44f257c7d?d=identicon&s=25 Oliver Schwantje (oliverschwantje)
on 2009-05-15 15:43
Oliver Schwantje wrote:
> We have the same problem with the columns-Method.
> It works, if the table has no date-field. With a date-field
> we get the same exception. If you can't reproduce the error,
> it may be a problem of different nls_date_format-Parameters.
>
>
> ciao
> oliver

And I know that it's a problem the Java-Method:
  jdbc_adapter.RubyJdbcConnection#columns_internal


bye
oliver
This topic is locked and can not be replied to.