Hi
I have a rather large project that uses ActiveRecord both with Rails,
and separately in various scripts. All has been working well until
I upgraded from version 2.0.2 to version 2.2.2. Now, ActiveRecord
doesn't seem to be looking for the correct table. Here's an example
of what I'm seeing.
class ActiveRecord::Base
def self.get_dbconf
conf = Hash.new
IO.foreach("/etc/dbconf") do |line|
next if line.length == 0
name, data = line.split(": ")
conf[name] = data.chomp
end
return conf
end
Conf = get_dbconf
end
end
class Scode < ActiveRecord::Base
Scode.establish_connection(self::Conf)
end
irb(main):001:0> require 'scode'
=> true
irb(main):002:0> Scode
=> Scode(Table doesn't exist)
irb(main):003:0> Scode.table_name
=> "\e[4mScode\e[0ms"
I know I can set the table name manually, but if this simple mechanism
is broken, how much other stuff is broken in this version?
Ken
class Scode < ActiveRecord::Base
Scode.establish_connection(self::Conf)
end
irb(main):001:0> require 'scode'
=> true
irb(main):002:0> Scode
=> Scode(Table doesn't exist)
irb(main):003:0> Scode.table_name
=> "\e[4mScode\e[0ms"
I know I can set the table name manually, but if this simple mechanism
is broken, how much other stuff is broken in this version?
Something to do with the connection pooling changes ?
Fred
Quoth Frederick Cheung (frederick.cheung@gmail.com):
>
>
> class Scode < ActiveRecord::Base
> Scode.establish_connection(self::Conf)
> end
>
> irb(main):001:0> require 'scode'
> => true
> irb(main):002:0> Scode
> => Scode(Table doesn't exist)
> irb(main):003:0> Scode.table_name
> => "\e[4mScode\e[0ms"
>
> I know I can set the table name manually, but if this simple mechanism
> is broken, how much other stuff is broken in this version?
>
Something to do with the connection pooling changes ?
I think it may have something to do with changes to ActiveSupport.
I notice that on my production system (v2.0.2), when I load an
ActiveRecord class, the Inflector class is available:
irb(main):001:0> require 'scode'
=> true
irb(main):002:0> Inflector
=> Inflector
On the test system (v2.2.2), it is not:
irb(main):002:0> require 'scode'
=> true
irb(main):003:0> Inflector
NameError: uninitialized constant Inflector
from /pkg/ruby-1.8.7-p72/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/dependencies.rb:445:in `load_missing_constant'
from /pkg/ruby-1.8.7-p72/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/dependencies.rb:77:in `const_missing'
from /pkg/ruby-1.8.7-p72/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/dependencies.rb:89:in `const_missing'
from (irb):3
irb(main):004:0> ActiveSupport::Inflector
=> ActiveSupport::Inflector
Ken
Quoth Frederick Cheung (frederick.cheung@gmail.com):
>
>
> class Scode < ActiveRecord::Base
> Scode.establish_connection(self::Conf)
> end
>
> irb(main):001:0> require 'scode'
> => true
> irb(main):002:0> Scode
> => Scode(Table doesn't exist)
> irb(main):003:0> Scode.table_name
> => "\e[4mScode\e[0ms"
>
> I know I can set the table name manually, but if this simple mechanism
> is broken, how much other stuff is broken in this version?
>
Something to do with the connection pooling changes ?
In the end, the problem was fixed by moving a require (which requires
a class completely unrelated to ActiveRecord anything) *above* the
require which pulls in my activerecord classes.
Can't say that I much like the fragility of the arrangement.
Ken