Rails + Cassandra

I have an error installing gem cassandra.

sudo gem install cassandraBuilding native extensions. This could take a while...ERROR: Error installing cassandra: ERROR: Failed to build gem native extension. /usr/bin/ruby1.9.1 extconf.rbchecking for strlcpy() in string.h... nocreating Makefile

makegcc -I. -I/usr/include/ruby-1.9.1/i686-linux -I/usr/include/ ruby-1.9.1/ruby/backward -I/usr/include/ruby-1.9.1 -I. - D_FILE_OFFSET_BITS=64 -fPIC -g -O2 -Wall -Werror -o struct.o -c struct.c

Gem files will remain installed in /usr/lib/ruby/gems/1.9.1/gems/ thrift-0.7.0 for inspection.

irb(main):001:0> reqire 'cassandra'

NoMethodError: undefined method `reqire' for main:Object from (irb):1 from /usr/bin/irb:12:in `<main>'

irb(main):001:0> require 'thrift' => true

What's wrong?

I have an error installing gem cassandra.

sudo gem install cassandraBuilding native extensions. This could take a while...ERROR: Error installing cassandra: ERROR: Failed to build gem native extension. /usr/bin/ruby1.9.1 extconf.rbchecking for strlcpy() in string.h... nocreating Makefile

makegcc -I. -I/usr/include/ruby-1.9.1/i686-linux -I/usr/include/ ruby-1.9.1/ruby/backward -I/usr/include/ruby-1.9.1 -I. - D_FILE_OFFSET_BITS=64 -fPIC -g -O2 -Wall -Werror -o struct.o -c struct.c

Gem files will remain installed in /usr/lib/ruby/gems/1.9.1/gems/ thrift-0.7.0 for inspection.

It seems likely that you don't have all the build tools installed or in your user's PATH.

irb(main):001:0> reqire 'cassandra'

NoMethodError: undefined method `reqire' for main:Object from (irb):1 from /usr/bin/irb:12:in `<main>'

Mis-spelled require.

irb(main):001:0> require 'thrift' => true

require works, so your Ruby is at least partially working then,

What's wrong?

What's your environment, and what steps have taken you to this point? It's impossible to guess at this stage. Are you able to compile and install other applications from the command line with this user?

Walter

Require Cassandra

irb(main):001:0> require 'cassandra' LoadError: no such file to load -- cassandra   from <internal:lib/rubygems/custom_require>:29:in `require'   from <internal:lib/rubygems/custom_require>:29:in `require'   from (irb):1   from /usr/bin/irb:12:in `<main>'

My gem list

$ gem list

*** LOCAL GEMS ***

actionmailer (3.1.3) actionpack (3.1.3) activemodel (3.1.3) activerecord (3.1.3) activeresource (3.1.3) activesupport (3.1.3) ansi (1.4.1) arel (2.2.1) builder (3.0.0) bundler (1.0.21) coffee-rails (3.1.1) coffee-script (2.2.0) coffee-script-source (1.1.3) erubis (2.7.0) execjs (1.2.9) haml (3.1.3) haml-rails (0.3.4) hike (1.2.1) i18n (0.6.0) jquery-rails (1.0.18) json (1.6.3, 1.6.1) libv8 (3.3.10.4 x86-linux) mail (2.3.0) mime-types (1.17.2) multi_json (1.0.4, 1.0.3) polyglot (0.3.3) rack (1.3.5) rack-cache (1.1) rack-mount (0.8.3) rack-ssl (1.3.2) rack-test (0.6.1) rails (3.1.3) railties (3.1.3) rake (0.9.2.2) rdoc (3.11) sass (3.1.10) sass-rails (3.1.5) simple_uuid (0.2.0) slayer-thrift (0.7.0) sprockets (2.0.3) sqlite3 (1.3.4) therubyracer (0.9.9) thor (0.14.6) thrift (0.8.0) tilt (1.3.3) treetop (1.4.10) turn (0.8.2) tzinfo (0.3.31) uglifier (1.1.0)

I think that error in the gem thrift_client, because ...

~$ sudo gem install thrift_client -v '0.7.1'

Building native extensions. This could take a while... ERROR: Error installing thrift_client:   ERROR: Failed to build gem native extension.

/usr/bin/ruby1.9.1 extconf.rb checking for strlcpy() in string.h... no creating Makefile

make gcc -I. -I/usr/include/ruby-1.9.1/i686-linux -I/usr/include/ruby-1.9.1/ ruby/backward -I/usr/include/ruby-1.9.1 -I. -D_FILE_OFFSET_BITS=64 - fPIC -g -O2 -Wall -Werror -o protocol.o -c protocol.c gcc -I. -I/usr/include/ruby-1.9.1/i686-linux -I/usr/include/ruby-1.9.1/ ruby/backward -I/usr/include/ruby-1.9.1 -I. -D_FILE_OFFSET_BITS=64 - fPIC -g -O2 -Wall -Werror -o struct.o -c struct.c <....>

make: *** [struct.o] Error 1

Require Cassandra

irb(main):001:0> require 'cassandra' LoadError: no such file to load -- cassandra   from <internal:lib/rubygems/custom_require>:29:in `require'   from <internal:lib/rubygems/custom_require>:29:in `require'   from (irb):1   from /usr/bin/irb:12:in `<main>'

My gem list

$ gem list

*** LOCAL GEMS ***

actionmailer (3.1.3) actionpack (3.1.3) activemodel (3.1.3) activerecord (3.1.3) activeresource (3.1.3) activesupport (3.1.3) ansi (1.4.1) arel (2.2.1) builder (3.0.0) bundler (1.0.21) coffee-rails (3.1.1) coffee-script (2.2.0) coffee-script-source (1.1.3) erubis (2.7.0) execjs (1.2.9) haml (3.1.3) haml-rails (0.3.4) hike (1.2.1) i18n (0.6.0) jquery-rails (1.0.18) json (1.6.3, 1.6.1) libv8 (3.3.10.4 x86-linux) mail (2.3.0) mime-types (1.17.2) multi_json (1.0.4, 1.0.3) polyglot (0.3.3) rack (1.3.5) rack-cache (1.1) rack-mount (0.8.3) rack-ssl (1.3.2) rack-test (0.6.1) rails (3.1.3) railties (3.1.3) rake (0.9.2.2) rdoc (3.11) sass (3.1.10) sass-rails (3.1.5) simple_uuid (0.2.0) slayer-thrift (0.7.0) sprockets (2.0.3) sqlite3 (1.3.4) therubyracer (0.9.9) thor (0.14.6) thrift (0.8.0) tilt (1.3.3) treetop (1.4.10) turn (0.8.2) tzinfo (0.3.31) uglifier (1.1.0)

I think that error in the gem thrift_client, because ...

~$ sudo gem install thrift_client -v '0.7.1'

Building native extensions. This could take a while... ERROR: Error installing thrift_client:   ERROR: Failed to build gem native extension.

/usr/bin/ruby1.9.1 extconf.rb checking for strlcpy() in string.h... no creating Makefile

make gcc -I. -I/usr/include/ruby-1.9.1/i686-linux -I/usr/include/ruby-1.9.1/ ruby/backward -I/usr/include/ruby-1.9.1 -I. -D_FILE_OFFSET_BITS=64 - fPIC -g -O2 -Wall -Werror -o protocol.o -c protocol.c gcc -I. -I/usr/include/ruby-1.9.1/i686-linux -I/usr/include/ruby-1.9.1/ ruby/backward -I/usr/include/ruby-1.9.1 -I. -D_FILE_OFFSET_BITS=64 - fPIC -g -O2 -Wall -Werror -o struct.o -c struct.c <....>

make: *** [struct.o] Error 1

So what is your build environment? Which compiler is installed, what version of Linux is this, are you running it inside a VM or anything odd like that? It sounds like you have ruby and rubygems installed fine, but you don't have the compiler or your environment set correctly to build anything that is processor-native. Ruby code per se is cross-platform, since it's an interpreted language. But anything in a gem that needs lower-level access to the hardware will often have to call out to a cross-compiler and create and link some C code or similar. That's where your environment is breaking down, from what I have seen. When you get that part working, you will be in better shape to use gem to install these more "binary" gems.

Walter

I'm using Ubuntu, Ruby (1.9.3) installed by RVM

Ubuntu 11.10

Unfortunately you have lost all the context by not quoting the previous messages, but if I remember correctly you are having problems building the native extensions. Try, in a terminal,

sudo apt-get install build-essential bison openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev autoconf

If you want to use mysql then also sudo apt-get install libmysql-ruby libmysqlclient-dev

and if you want to use nokigirii sudo apt-get install libxslt-dev libxml2-dev

The above might install a few things you do not need but they should not do any harm.

In addition, if you are using rails 3 you need not install the gems manually, just make sure they are included in Gemfile and do bundle install to install them.

Colin

Ubuntu 11.10

Unfortunately you have lost all the context by not quoting the previous messages, but if I remember correctly you are having problems building the native extensions. Try, in a terminal,

sudo apt-get install build-essential bison openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev autoconf

Before you do that, be sure to run

sudo apt-get update

...first, and let it do whatever it wants to do. I have wasted many minutes when I forget to do that first.

Walter

sathia@sathia27 ~ $ sudo gem search cassandra --remote

*** REMOTE GEMS ***

activerecord-cassandra-adapter (0.1.0)

cassandra (0.12.1)

cassandra-cql (1.0.2)

cassandra-jars (1.0.0 java)

Try search for name.

If that exist, but you cannot install.

you need to update ruby gems.

and then you can be install gem

and then if you cannot install it.

Please install its dependency

See its dependency by below command

sathia@sathia27 ~ $ sudo gem dependency cassandra --remote

Gem cassandra-0.12.1

json (>= 0)

rake (>= 0)

simple_uuid (>= 0.2.0)

thrift_client (>= 0.7.0)

Gem cassandra-cql-1.0.2

bundler (>= 1.0.0, development)

rake (>= 0.9.2, development)

rcov (>= 0.9.9, development)

rspec (>= 2.6.0, development)

simple_uuid (>= 0.2.0)

thrift_client (>= 0.7.1)

yard (>= 0.7.2, development)

Gem cassandra-model-0.2.4

cassandra (>= 0, development)

shoulda (>= 0, development)

Gem cassandra_client-0.3

json (>= 0)

Gem cassandra_mapper-0.0.1

cassandra (>= 0)

mocha (>= 0, development)

rake (>= 0, development)

shoulda (>= 0, development)

simple_mapper (>= 0)

tzinfo (>= 0)

I recently started learning Rails and I'm sorry for my English (I live in Moscow) =) The Russian Rails Group of developers to me no one could help ...

Initialy, I installed Ubuntu 11.10, then updated apt-get. Next, install the RVM and Ruby.

Cassandra has installed the following instructions: http://blog.wolfgang-vogl.com/?p=140

How do I link my application on Rails 3 and Cassandra?

Thank you all!

I would try

rvm get head

that will update RVM to the latest. Then

rvm install 1.9.2

I know you have it installed, but do it again to get the latest version. Then:

git update --system

Then

gem install cassandra

And then read, parse, and act on the results of that last command. If it says something like, "Install failed, install log is here with the results of that failure" then locate and read that install log. Try to take each error one at a time, and resolve it. You may have to go back to the gem install cassandra line many, many times, once per thing you change from the install errors log.

This part of compiling software is often compared to shaving a yak. Fun? Not really. If you need a shiny yak, then essential.

Walter

sudo rvm get head Original installed RVM version: rvm 1.10.0-pre by Wayne E. Seguin (wayneeseguin@gmail.com) [https:// rvm.beginrescueend.com/] remote: Counting objects: 340, done.remote: Compressing objects: 100% (277/277), done.remote: Total 340 (delta 25), reused 193 (delta 20)Receiving objects: 100% (340/340), 810.58 KiB | 744 KiB/s, done.Resolving deltas: 100% (25/25), done.From git://github.com/wayneeseguin/rvm + 62631e5...db09ec1 master -> origin/master (forced update)HEAD is now at db09ec1 do not force changing ruby on gemdir, fix #631   RVM: Shell scripts enabling management of multiple ruby environments. RTFM: https://rvm.beginrescueend.com/ HELP: Kiwi IRC (#rvm on irc.freenode.net) Upgrading the RVM installation in /usr/share/ruby- rvm/ Correct permissions for base binaries in /usr/share/ruby-rvm/ bin... Copying manpages into place.RVM system user group 'rvm' exists, proceeding with installation. Recording config files for rubies. root, If you have any questions, issues and/or ideas for improvement pleasefork the project and issue a pull request. If you wish to disable the project .rvmrc file functionality, setrvm_project_rvmrc=0 in either /etc/rvmrc or ~/.rvmrc. NOTE: To Multi-User installers, please do NOT forget to add your users to the 'rvm' group. The installer no longer auto-adds root or users to the rvm group. Admins must do this. Also, please note that group memberships are ONLY evaluated at login time. This means that users must log out then back in before group membership takes effect! Thank you for using RVM! I sincerely hope that RVM helps to make your life easier and more enjoyable!!!   ~Wayne

Upgrade Notes   * rvm_trust_rvmrcs has been changed to rvm_trust_rvmrcs_flag for consistency   * Project rvmrc files are now checked for trust whenever they change, as promised by the note displayed during the review process   * Ruby package dependency list for your OS is given by: rvm requirements   * If you encounter any issues with a ruby 'X' your best bet is to:     rvm get head && rvm reinstall X   * If you see the following error message: Unknown alias name: 'default' re-set your default ruby, this is due to a change in how default works.   * after_use and after_cd hook now supports multiple files with after_*_* the custom hooks can be easily turned on/off by:
chmod +x /usr/share/ruby-rvm/hooks/after_cd_[hook_name] chmod -x / usr/share/ruby-rvm/hooks/after_use_[hook_name]   * If your shell exits on entering directory with freshly checked out sources you should update .rvmrc file, and replace any `exit ` with `return `.

Upgrade of RVM in /usr/share/ruby-rvm/ is complete.

Installed RVM HEAD version: rvm 1.10.0-pre by Wayne E. Seguin (wayneeseguin@gmail.com) [https:// rvm.beginrescueend.com/] RVM reloaded!

NEXT:

$ sudo rvm install 1.10.0 rbx-1.10.0 installing #dependencies Cloning git://github.com/rubinius/rubinius.git Copying from repo to source... rbx-1.10.0 - #configuring rbx-1.10.0 - #compiling rbx-1.10.0 - adjusting #shebangs for (erb ri rdoc). rbx-1.10.0 - #importing default gemsets (/usr/share/ruby-rvm/gemsets/)

$ git update --system git: 'update' is not a git command. See 'git --help'.

Did you mean this?   update-ref

AND:

$ sudo gem install cassandra Building native extensions. This could take a while... ERROR: Error installing cassandra:   ERROR: Failed to build gem native extension.

/usr/bin/ruby1.9.1 extconf.rb checking for strlcpy() in string.h... no creating Makefile

make gcc -I. -I/usr/include/ruby-1.9.1/i686-linux -I/usr/include/ruby-1.9.1/ ruby/backward -I/usr/include/ruby-1.9.1 -I. -D_FILE_OFFSET_BITS=64 - fPIC -g -O2 -Wall -Werror -o protocol.o -c protocol.c gcc -I. -I/usr/include/ruby-1.9.1/i686-linux -I/usr/include/ruby-1.9.1/ ruby/backward -I/usr/include/ruby-1.9.1 -I. -D_FILE_OFFSET_BITS=64 - fPIC -g -O2 -Wall -Werror -o struct.o -c struct.c struct.c:28:1: ошибка: static-декларация <<strlcpy>> после неstatic- декларации /usr/include/ruby-1.9.1/ruby/missing.h:157:20: замечание: здесь была предыдущая декларация <<strlcpy>> make: *** [struct.o] Ошибка 1

Gem files will remain installed in /var/lib/gems/1.9.1/gems/ thrift-0.7.0 for inspection. Results logged to /var/lib/gems/1.9.1/gems/thrift-0.7.0/ext/ gem_make.out

sudo rvm get head Original installed RVM version: rvm 1.10.0-pre by Wayne E. Seguin (wayneeseguin@gmail.com) [https:// rvm.beginrescueend.com/] remote: Counting objects: 340, done.remote: Compressing objects: 100% (277/277), done.remote: Total 340 (delta 25), reused 193 (delta 20)Receiving objects: 100% (340/340), 810.58 KiB | 744 KiB/s, done.Resolving deltas: 100% (25/25), done.From git://github.com/wayneeseguin/rvm + 62631e5...db09ec1 master -> origin/master (forced update)HEAD is now at db09ec1 do not force changing ruby on gemdir, fix #631 RVM: Shell scripts enabling management of multiple ruby environments. RTFM: https://rvm.beginrescueend.com/ HELP: Kiwi IRC (#rvm on irc.freenode.net) Upgrading the RVM installation in /usr/share/ruby- rvm/ Correct permissions for base binaries in /usr/share/ruby-rvm/ bin... Copying manpages into place.RVM system user group 'rvm' exists, proceeding with installation. Recording config files for rubies. root, If you have any questions, issues and/or ideas for improvement pleasefork the project and issue a pull request. If you wish to disable the project .rvmrc file functionality, setrvm_project_rvmrc=0 in either /etc/rvmrc or ~/.rvmrc. NOTE: To Multi-User installers, please do NOT forget to add your users to the 'rvm' group. The installer no longer auto-adds root or users to the rvm group. Admins must do this. Also, please note that group memberships are ONLY evaluated at login time. This means that users must log out then back in before group membership takes effect! Thank you for using RVM! I sincerely hope that RVM helps to make your life easier and more enjoyable!!! ~Wayne

Upgrade Notes * rvm_trust_rvmrcs has been changed to rvm_trust_rvmrcs_flag for consistency * Project rvmrc files are now checked for trust whenever they change, as promised by the note displayed during the review process * Ruby package dependency list for your OS is given by: rvm requirements * If you encounter any issues with a ruby 'X' your best bet is to:    rvm get head && rvm reinstall X * If you see the following error message: Unknown alias name: 'default' re-set your default ruby, this is due to a change in how default works. * after_use and after_cd hook now supports multiple files with after_*_* the custom hooks can be easily turned on/off by:
chmod +x /usr/share/ruby-rvm/hooks/after_cd_[hook_name] chmod -x / usr/share/ruby-rvm/hooks/after_use_[hook_name] * If your shell exits on entering directory with freshly checked out sources you should update .rvmrc file, and replace any `exit ` with `return `.

Upgrade of RVM in /usr/share/ruby-rvm/ is complete.

Installed RVM HEAD version: rvm 1.10.0-pre by Wayne E. Seguin (wayneeseguin@gmail.com) [https:// rvm.beginrescueend.com/] RVM reloaded!

NEXT:

$ sudo rvm install 1.10.0 rbx-1.10.0 installing #dependencies Cloning git://github.com/rubinius/rubinius.git Copying from repo to source... rbx-1.10.0 - #configuring rbx-1.10.0 - #compiling rbx-1.10.0 - adjusting #shebangs for (erb ri rdoc). rbx-1.10.0 - #importing default gemsets (/usr/share/ruby-rvm/gemsets/)

$ git update --system git: 'update' is not a git command. See 'git --help'.

Sorry, I meant

gem update --system

Not git...

Walter

$ sudo gem update --systemERROR: While executing gem ... (RuntimeError) gem update --system is disabled on Debian, because it will overwrite the content of the rubygems Debian package, and might break your Debian system in subtle ways. The Debian-supported way to update rubygems is through apt-get, using Debian official repositories.If you really know what you are doing, you can still update rubygems by setting the REALLY_GEM_UPDATE_SYSTEM environment variable, but please remember that this is completely unsupported by Debian.

Wow. How much control do you have over this server? Can you remove the Debian gem package and re-install gem from source? My sysadmin skills are limited to Mac OS X Server, Solaris, and Ubuntu, so I don't have any more specific advice for you there. If you can, I would take everything off -- gem, Ruby, everything except the build tools basically. Then use the RVM installer to install Ruby and gem in one go. Here's my (Ubuntu) recipe for that (do all of this as root):

aptitude safe-upgrade aptitude update aptitude install build-essential openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool bison subversion libcurl4-openssl-dev apache2 apache2-dev apache2-prefork-dev libapr1-dev libaprutil1-dev mysql-server mysql-dev (preceding should be all one line, naturally)

bash < <(curl -sk https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)

log out and back in

rvm install 1.9.2 rvm default 1.9.2

gem update --system gem install passenger (follow instructions from the installer)

passenger-install-apache2-module (follow instructions from the installer)

If you don't have aptitude, you can substitute apt-get for it where noted above, I have used them interchangeably in the past.

Walter

$ sudo gem update --systemERROR: While executing gem …

(RuntimeError) gem update --system is disabled on Debian, because

it will overwrite the content of the rubygems Debian package, and

might break your Debian system in subtle ways. The Debian-supported

way to update rubygems is through apt-get, using Debian official

repositories.If you really know what you are doing, you can still

update rubygems by setting the REALLY_GEM_UPDATE_SYSTEM environment

variable, but please remember that this is completely unsupported by

Debian.

Wow. How much control do you have over this server? Can you remove the Debian gem package and re-install gem from source? My sysadmin skills are limited to Mac OS X Server, Solaris, and Ubuntu, so I don’t have any more specific advice for you there. If you can, I would take everything off – gem, Ruby, everything except the build tools basically. Then use the RVM installer to install Ruby and gem in one go. Here’s my (Ubuntu) recipe for that (do all of this as root):

aptitude safe-upgrade

aptitude update

aptitude install build-essential openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool bison subversion libcurl4-openssl-dev apache2 apache2-dev apache2-prefork-dev libapr1-dev libaprutil1-dev mysql-server mysql-dev

(preceding should be all one line, naturally)

bash < <(curl -sk https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)

log out and back in

rvm install 1.9.2

rvm default 1.9.2

gem update --system

gem install passenger

(follow instructions from the installer)

passenger-install-apache2-module

(follow instructions from the installer)

If you don’t have aptitude, you can substitute apt-get for it where noted above, I have used them interchangeably in the past.

I second the suggestion to use RVM instead of the debian packages for ruby and rubygems. I’ve generally found the packages to be problematic with a lot of newer gems. I read a while ago that the people who maintain the Debian ruby packages are essentially unsupported and few in number, so updates to those packages are very infrequent. I think they basically said not to expect a Debian package for 1.9.2 anytime soon.