Ruby - undefined method `connect’ for Mysql:Class!

Updated:


Ruby に Gem パッケージ mysql をインストール済みなのに、connect 時に以下のようなエラーが発生します。

undefined method `connect' for Mysql:Class

環境によって、発生したり発生しなかったりします。

以下、対策方法メモです。

備忘録

0. 前提条件

当方の場合、以下のような環境でこのようなエラーが発生しました。

  • Scientific Linux 6.2 (x86_64)
  • ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux] (ソースからコンパイルしてインストールした)
  • Gem パッケージ mysql 2.8.1

ちなみに、以下のような環境では問題なかった。

  • CentOS 6.3 (i386)
  • ruby 1.9.3p194 (2012-04-20 revision 35410) [i686-linux] (ソースからコンパイルしてインストールした)
  • Gem パッケージ mysql 2.8.1

1. connect メソッドの存在確認

以下のようにして、connect コマンドが存在するか確認する。

# irb
irb(main):001:0> require 'mysql'
=> true
irb(main):002:0> Mysql.methods
=> [:allocate, :new, :superclass, :freeze, :===, :==, :<=>, :<, :<=, :>, :>=, :to_s, :included_modules, 
:include?, :name, :ancestors, :instance_methods, :public_instance_methods, :protected_instance_methods, 
:private_instance_methods, :constants, :const_get, :const_set, :const_defined?, :const_missing, 
:class_variables, :remove_class_variable, :class_variable_get, :class_variable_set, 
:class_variable_defined?, :public_constant, :private_constant, :module_exec, :class_exec, :module_eval, 
:class_eval, :method_defined?, :public_method_defined?, :private_method_defined?, 
:protected_method_defined?, :public_class_method, :private_class_method, :autoload, :autoload?, 
:instance_method, :public_instance_method, :nil?, :=~, :!~, :eql?, :hash, :class, :singleton_class, 
:clone, :dup, :initialize_dup, :initialize_clone, :taint, :tainted?, :untaint, :untrust, :untrusted?, 
:trust, :frozen?, :inspect, :methods, :singleton_methods, :protected_methods, :private_methods, 
:public_methods, :instance_variables, :instance_variable_get, :instance_variable_set, 
:instance_variable_defined?, :instance_of?, :kind_of?, :is_a?, :tap, :send, :public_send, :respond_to?, 
:respond_to_missing?, :extend, :display, :method, :public_method, :define_singleton_method, :object_id, 
:to_enum, :enum_for, :equal?, :!, :!=, :instance_eval, :instance_exec, :__send__, :__id__]

connect メソッドがありません。

2. Gem パッケージ ruby-mysql の導入

詳細は不明だが、mysql の代わりに ruby-mysql を導入すればよいようです。 Gem パッケージ mysql をアンインストールして、ruby-mysql をインストールする。

# gem list | grep mysql
mysql (2.8.1)
# gem uninstall mysql
# gem install ruby-mysql
# gem list | grep mysql
ruby-mysql (2.9.10)

3. 再度 connect メソッドの存在確認

以下のようにして、connect コマンドが存在するか確認する。

# irb
irb(main):001:0> require 'mysql'
=> true
irb(main):002:0> Mysql.methods
=> [:init, :new, :real_connect, :connect, :escape_string, :quote, :client_info, :get_client_info, 
:client_version, :get_client_version, :allocate, :superclass, :freeze, :===, :==, :<=>, :<, :<=, :>, 
:>=, :to_s, :included_modules, :include?, :name, :ancestors, :instance_methods, 
:public_instance_methods, :protected_instance_methods, :private_instance_methods, :constants, 
:const_get, :const_set, :const_defined?, :const_missing, :class_variables, :remove_class_variable, 
:class_variable_get, :class_variable_set, :class_variable_defined?, :public_constant, :private_constant, 
:module_exec, :class_exec, :module_eval, :class_eval, :method_defined?, :public_method_defined?, 
:private_method_defined?, :protected_method_defined?, :public_class_method, :private_class_method, 
:autoload, :autoload?, :instance_method, :public_instance_method, :nil?, :=~, :!~, :eql?, :hash, :class, 
:singleton_class, :clone, :dup, :initialize_dup, :initialize_clone, :taint, :tainted?, :untaint, 
:untrust, :untrusted?, :trust, :frozen?, :inspect, :methods, :singleton_methods, :protected_methods, 
:private_methods, :public_methods, :instance_variables, :instance_variable_get, :instance_variable_set, 
:instance_variable_defined?, :instance_of?, :kind_of?, :is_a?, :tap, :send, :public_send, :respond_to?, 
:respond_to_missing?, :extend, :display, :method, :public_method, :define_singleton_method, :object_id, 
:to_enum, :enum_for, :equal?, :!, :!=, :instance_eval, :instance_exec, :__send__, :__id__]

connect メソッドがあります。


これで、connect 時のエラーはなくなりました。 アーキテクチャによって、入るパッケージが異なるように思わせる現象でした。

以上です。





 

Sponsored Link

 

Comments