mysql2 adapter unable to connect to MySQL

Hello,

When I am running the command "rails server", I am getting the following error /usr/local/bin/ruby: symbol lookup error: /usr/local/lib/ruby/gems/ 1.9.1/gems/gems/mysql2-0.2.6/lib/mysql2/mysql2.so: undefined symbol: RARRAY_LEN

Earlier, I got exactly the same error, when was I executing the command rake db:bootstrap It got solved when I modified the command to the following rake db:bootstrap --with-mysql-config=/usr/local/bin/mysql_config

I am understanding from the above that mysql2 adapter was not able to find MySQL, which it was able to after passing the argument. Thinking in those lines, I executed the following commands

rails server --with-mysql-config=/usr/local/bin/mysql_config But, it does not solve it rails does not take that argument

I then put the parameter --with-mysql-config=/usr/local/bin/mysql_config in a configuration file and executed rails server --config=configFileMysql

I am getting the following message /usr/local/lib/ruby/gems/1.9.1/gems/activesupport-3.0.5/lib/ active_support/dependencies.rb:239:in `require': no such file to load -- ./configFileMysql (LoadError)

I also want to mention that I am running "rails server" command to run spreecommerce 0.40.3 package.

Could anyone please help me as to how to solve the error I pointed out earlier regarding RARRAY_LEN

I have the following content in my database.yml

development:   adapter: mysql2   encoding: utf8   reconnect: false   database: fourth_development   pool: 5   username: root   password:   socket: /var/lib/mysql/mysql.sock

I also want to mention that mysql client did not work earlier and it was giving following error ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) I had to change the command from "mysql" to mysql --user=root --password --socket=/var/lib/mysql/mysql.sock in order to make it work and also add in my /etc/my.cnf file, I had to change it to [client] socket: /var/lib/mysql/mysql.sock

On my Fedora 14 OS, I have the following installed Rails 3.0.5, installed at /usr/local/bin/rails

ruby --version gives me ruby 1.9.2p0 (2010-08-18) [i686-linux] whereis ruby gives me ruby: /usr/lib/ruby /usr/local/bin/ruby /usr/local/lib/ruby

mysql Ver 14.14 Distrib 5.1.51, for pc-linux-gnu (i686) using EditLine wrapper

/etc/rc.d/init.d/mysql status MySQL running (28105) [ OK ]

Thanks a bunch, Ajay

Hi Ajay,

Have you tried uninstalling mysql2 gem and reinstalling it with the following command?

gem install mysql2 – --with-mysql-config=/usr/local/bin/mysql_config

B.

Hi Bryan,

I executed the following command gem uninstall mysql2

followed by the command you mentioned.

I then executed the command rails server But, I am getting the same error. Please let me know, if you have any other ideas that I can try.

Thanks, Ajay

i have same problem on windows xp i tried many ways, even i could excute rails server but after running server, rails application doesn't work

Hi Ajay,

It might still be that it doesn’t understand how to talk to MySQL. I’m just trying to cover the it knowing where things are. It may still not know which socket to use. I ran into this issue on a Linux machine once and got around it by symlinking from the tmp folder to the actual socket. Try that and see what happens.

cd /tmp sudo ln -s /var/lib/mysql/mysql.sock mysql.sock

Thanks, B.

The issues that are happening here are on Ubuntu and not Windows. Please post what error are you getting when you run rails server?

Thanks, B.

Hi Bryan,

I executed the symlink command you sent me and then executed rails server But, I am still getting the same error. /usr/local/bin/ruby: symbol lookup error: /usr/local/lib/ruby/gems/ 1.9.1/gems/gems/mysql2-0.2.6/lib/mysql2/mysql2.so: undefined symbol: RARRAY_LEN

In addition, I have done the following experiments rails new blog -d=mysql cd blog su bundle install rake db:create rails server

The above set of instructions are rails instructions for getting started on rails. With these instructions, rails server starts well at the following URL http://0.0.0.0:3000

For the above set of instructions, I have the following lines in my GemFile

gem 'rails', '3.0.5' gem 'mysql2'

In my config/database.yml, I have development:   adapter: mysql2   encoding: utf8   reconnect: false   database: blog_development   pool: 5   username: root   password:   socket: /tmp/mysql.sock

I tried having   socket: /var/lib/mysql/mysql.lock with the symbol link and without it. It does not seem to make any difference.

With the spree package that I am trying to run, I have the following content in my Gemfile

gem 'rails', '3.0.5'

# Bundle edge Rails instead: # gem 'rails', :git => 'git://github.com/rails/rails.git'

gem 'mysql2' gem 'newrelic_rpm'

# Followed by spree itself first, all spree-specific extensions second gem 'spree', '0.40.3' gem 'spree_active_shipping', :git => 'https://github.com/spree/ spree_active_shipping.git' gem 'spree_product_assembly', :git => 'git://github.com/spree/spree- product-assembly.git' gem 'spree_static_content', :git => 'git://github.com/spree/ spree_static_content.git'

I executed the following set of commands rails new xyz -d=mysql cd xyz su bundle install rake db:create

rails g spree:site rake spree:install

rake spree_sample:install rails server --config=/usr/local/bin/mysql_config

Above are the instructions given for spree at the URL, http://spreecommerce.com/documentation/getting_started.html

config/database.yml is same as previously mentioned

Now executing, rails server gives /usr/local/bin/ruby: symbol lookup error: /usr/local/lib/ruby/gems/ 1.9.1/gems/gems/mysql2-0.2.6/lib/mysql2/mysql2.so: undefined symbol: RARRAY_LEN

Question is my why two different results? Is it because in one of the case, mysql connection is not needed as no information is there in the tables?

Also, I had tried downgrading rails to 3.0.4 and then executing the above set of instructions. But, same error

I read in the following post

that adding host name resolves the issue Therefore, I tried different options like host = starwars.localdomain host = starwars in /etc/my.cnf

But, when I do that I am unable to restart my MySQL server as it says that PID file has not been written to (or unable to write). Therefore, I am unable to mention host=0.0.0.0, which where rails server is getting started

I get similar error of unable to start mysql server, when I have socket=/tmp/mysql.sock in /etc/my.cnf

Thinking that linking was not allowed, I even tried disabling the following line in /etc/my.cnf symbolic-links=0 But, again server does not start, whenever I change anything in /etc/ my.cnf

My present my.cnf content is as follows [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock #socket=/tmp/mysql.sock user=mysql # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 #host=starwars

[mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid

[client] socket=/var/lib/mysql/mysql.sock #socket=/tmp/mysql.sock #host=starwars.localdomain

In one situation, which I can still reproduce, I am getting the following error, when I running as non-root

=> Booting WEBrick => Rails 3.0.4 application starting in development on http://0.0.0.0:3000 => Call with -d to detach => Ctrl-C to shutdown server Exiting /usr/local/lib/ruby/gems/1.9.1/gems/gems/rack-1.2.2/lib/rack/server.rb: 267:in `initialize': Permission denied - /home/Ajay/spree/rails4store/ tmp/pids/server.pid (Errno::EACCES)   from /usr/local/lib/ruby/gems/1.9.1/gems/gems/rack-1.2.2/lib/rack/ server.rb:267:in `open'   from /usr/local/lib/ruby/gems/1.9.1/gems/gems/rack-1.2.2/lib/rack/ server.rb:267:in `write_pid'   from /usr/local/lib/ruby/gems/1.9.1/gems/gems/rack-1.2.2/lib/rack/ server.rb:203:in `start'   from /usr/local/lib/ruby/gems/1.9.1/gems/railties-3.0.4/lib/rails/ commands/server.rb:65:in `start'   from /usr/local/lib/ruby/gems/1.9.1/gems/railties-3.0.4/lib/rails/ commands.rb:30:in `block in <top (required)>'   from /usr/local/lib/ruby/gems/1.9.1/gems/railties-3.0.4/lib/rails/ commands.rb:27:in `tap'   from /usr/local/lib/ruby/gems/1.9.1/gems/railties-3.0.4/lib/rails/ commands.rb:27:in `<top (required)>'   from script/rails:6:in `require'   from script/rails:6:in `<main>'

Thinking that probably I need to run as root, I executed as root It then gives the usual mysql2 error that I mentioned earlier. I thought of mentioning it to you in case you have seen this error before.

Please let me know if I am missing something or any other ideas that you have, which I can try out.

Thanks a lot for your help, Ajay

Hi Bryan,

I executed the symlink command you sent me and then executed rails server But, I am still getting the same error. /usr/local/bin/ruby: symbol lookup error: /usr/local/lib/ruby/gems/ 1.9.1/gems/gems/mysql2-0.2.6/lib/mysql2/mysql2.so: undefined symbol: RARRAY_LEN

In addition, I have done the following experiments

I think you are getting confused as you have several things going wrong at the same time. - something owned by root that is stopping webrick from dripping its pid file. Fix this by fixing the permissions on the folder it's trying to write its pid file to, not by running as root. - something wrong with your mysql gem (the messages about RARRAY_LEN) - possibly something wrong with your mysql install (if the only mysql problem you have is the RARRAY_LEN message then i'd stop fiddling with my.cnf - it's extremely unlikely that a problem with your mysql install caused that

Other things: don't run bundle:install as root - that will screw things up. If you have multiple versions of ruby installed, make sure rake,rails etc. are the ones from the ruby version you actually want (if my memory is correct RARRAY_LEN was a #define macro pre ruby 1.9, but became an actual function in 1.9, trying to load something compiled for 1.9 with the wrong ruby might cause that message (although gems should be segregated by ruby version))

Fred

Hi Fred,

Thanks for your comments and suggestions. They were really useful.

I first noticed that I had two mysql installations in my system - one through compilation and another installed through yum. I uninstalled both and had only one. But, it did not result in any change in error.

I then thought of focusing my attention on ruby. My system had ruby-1.9.2-p0 and it was installed by compiling it from source. Therefore, I thought of installing through yum. But, ruby 1.8.7 was only available through rpm

I have now installed ruby-1.9.2 through rvm. Some other errors occured, sort of irrelevant to the topic. After solving those problems, I finally executed the command rails server The error with mention of RARRAY_LEN did not occur .

In short, I was able to successfully start the rails server.

Thanks a lot for your help, Ajay