Gem only work in home directory

Hello every body, i have met a strange issue about activerecord gem.

This is my simple code:

===========================
#!/usr/bin/ruby
require “rubygems”
require “active_record”

ActiveRecord::Base.establish_connection(
:adapter => “mysql”,
:host => “localhost”,
:database => “database”,
)

class Text < ActiveRecord::Base
end

Text.create(:title => ‘hello’)

When i execute it in home dir, it works well.

======
abc@abc-desktop:~$ pwd
/home/abc
abc@abc-desktop:~$ ruby/mysql.rb
/var/lib/gems/1.9.1/gems/activerecord-2.3.8/lib/active_record/connection_adapters/mysql_adapter.rb:619:in
`real_connect’: Access denied for user ‘root’@‘localhost’ (using
password: NO) (Mysql::Error)

And then i change the work dir, it returns “Load Error”.

======
abc@abc-desktop:~/ruby$ pwd
/home/abc/ruby
abc@abc-desktop:~/ruby$ ./mysql.rb
/var/lib/gems/1.9.1/gems/activerecord-2.3.8/lib/active_record/connection_adapters/mysql_adapter.rb:7:in
`define_all_hashes_method!’: Mysql not loaded (RuntimeError)

Who can tell me how this happened?

thanks

  • Penn

I fixed this issue after reading this post.

On Sat, Dec 4, 2010 at 6:04 PM, Grick Zh [email protected] wrote:

Hello every body, i have met a strange issue about activerecord gem.

This is my simple code:

in the “interesting” file name ~/ruby/mysql.rb

/home/abc
/home/abc/ruby
abc@abc-desktop:~/ruby$ ./mysql.rb

/var/lib/gems/1.9.1/gems/activerecord-2.3.8/lib/active_record/connection_adapters/mysql_adapter.rb:7:in

`define_all_hashes_method!': Mysql not loaded (RuntimeError)

Who can tell me how this happend?

It took me some time to figure out, but actually this is somewhat funny

At some point, the ActiveRecord code calls “require ‘mysql’”
(/usr/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/connection_adapters/mysql_adapter.rb
line 20).

In the case where you run from the home dir, this works our correctly
(and loads the correct code), but when you run it from the ~/ruby
directory, this actually reloads your own ~/ruby/mysql.rb program again

(and this version of mysql.rb does not have the required methods).

A strong hint was in the remainder of the exception log below (it is
always
better to post the full error log to the list and not just the top
line).

The simple solution is to rename you program, e.g. to test_mysql.rb

peterv@ASUS:~/ruby$ ./test_mysql.rb
/usr/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/connection_adapters/mysql_adapter.rb:600:in
real_connect': Access denied for user 'root'@'localhost' (using password: NO) (Mysql::Error) ## this is the expected behavior from /usr/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/connection_adapters/mysql_adapter.rb:600:in connect’

Original trace below.

HTH,

Peter

peterv@ASUS:~/ruby$ ./mysql.rb
/usr/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/connection_adapters/mysql_adapter.rb:26:in
`mysql_connection’: !!! Outdated mysql gem. Upgrade to 2.8.1 or later.
In your Gemfile: gem ‘mysql’, ‘2.8.1’. Or use gem ‘mysql2’
(RuntimeError)

(BTW, I do have the 2.8.1 and the mysql2 gem, just a side effect of

the root cause problem)
from
/usr/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:228:in
send' from /usr/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:228:in new_connection’
from
/usr/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:236:in
checkout_new_connection' from /usr/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:190:in checkout’
from
/usr/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:186:in
loop' from /usr/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:186:in checkout’
from /usr/lib/ruby/1.8/monitor.rb:242:in synchronize' from /usr/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:185:in checkout’
from
/usr/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:93:in
connection' from /usr/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:316:in retrieve_connection’
from
/usr/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract/connection_specification.rb:97:in
retrieve_connection' from /usr/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract/connection_specification.rb:89:in connection’
from
/usr/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/base.rb:679:in
columns' from /usr/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/persistence.rb:284:in attributes_from_column_definition’
from
/usr/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/locking/optimistic.rb:62:in
attributes_from_column_definition' from /usr/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/base.rb:1394:in initialize’
from
/usr/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/base.rb:496:in
new' from /usr/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/base.rb:496:in create’
from ./mysql.rb:14
from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in
gem_original_require' from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in require’
from
/usr/lib/ruby/gems/1.8/gems/activesupport-3.0.3/lib/active_support/dependencies.rb:239:in
require' from /usr/lib/ruby/gems/1.8/gems/activesupport-3.0.3/lib/active_support/dependencies.rb:225:in load_dependency’
from
/usr/lib/ruby/gems/1.8/gems/activesupport-3.0.3/lib/active_support/dependencies.rb:596:in
new_constants_in' from /usr/lib/ruby/gems/1.8/gems/activesupport-3.0.3/lib/active_support/dependencies.rb:225:in load_dependency’
from
/usr/lib/ruby/gems/1.8/gems/activesupport-3.0.3/lib/active_support/dependencies.rb:239:in
require' from /usr/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/connection_adapters/mysql_adapter.rb:20:in mysql_connection’
from
/usr/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:228:in
send' from /usr/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:228:in new_connection’
from
/usr/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:236:in
checkout_new_connection' from /usr/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:190:in checkout’
from
/usr/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:186:in
loop' from /usr/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:186:in checkout’
from /usr/lib/ruby/1.8/monitor.rb:242:in synchronize' from /usr/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:185:in checkout’
from
/usr/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:93:in
connection' from /usr/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:316:in retrieve_connection’
from
/usr/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract/connection_specification.rb:97:in
retrieve_connection' from /usr/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract/connection_specification.rb:89:in connection’
from
/usr/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/base.rb:679:in
columns' from /usr/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/persistence.rb:284:in attributes_from_column_definition’
from
/usr/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/locking/optimistic.rb:62:in
attributes_from_column_definition' from /usr/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/base.rb:1394:in initialize’
from
/usr/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/base.rb:496:in
new' from /usr/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/base.rb:496:in create’
from ./mysql.rb:14

Peter V. wrote in post #966325:

It took me some time to figure out, but actually this is somewhat funny

At some point, the ActiveRecord code calls “require ‘mysql’”

(/usr/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/connection_adapters/mysql_adapter.rb

line 20).

Thank you Peter, now this issue is fixed. It is probably caused by the
incorrect setting of GEM PATH.