Following my successful Cassandra Cluster setup and having a potential client example to work with running Ruby On Rails (RoR), I came across the following examples in Ruby.
Not being a ruby developer, I thought it was time to investigate further. Starting first on Mac OS X 10.5, I found the first line example of installing cassandra via gem unsuccessful.
$ gem install cassandra Updating metadata for 1 gems from http://gems.rubyforge.org . complete ERROR: could not find cassandra locally or in a repository
Some more reading highlights Otherwise, you need to install Java 1.6, Git 1.6, Ruby, and Rubygems in some reasonable way.
In case you didn’t read my earlier posts, Java 6 is installed, but not the default.
export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home export PATH=$JAVA_HOME/bin:$PATH
I achieved installing RubyGems via Installing Ruby on Rails on Mac OS X.
$ sudo gem install rubygems-update Updating metadata for 1 gems from http://gems.rubyforge.org . complete Successfully installed rubygems-update-1.3.6 1 gem installed Installing ri documentation for rubygems-update-1.3.6... Installing RDoc documentation for rubygems-update-1.3.6... Could not find main page README Could not find main page README Could not find main page README Could not find main page README $ sudo update_rubygems RubyGems 1.3.6 installed === 1.3.6 / 2010-02-17 NOTE: http://rubygems.org is now the default source for downloading gems. You may have sources set via ~/.gemrc, so you should replace http://gems.rubyforge.org with http://rubygems.org http://gems.rubyforge.org will continue to work for the forseeable future. New features: * `gem` commands * Added `gem push` and `gem owner` for interacting with modern/Gemcutter sources * `gem dep` now supports --prerelease. * `gem fetch` now supports --prerelease. * `gem server` now supports --bind. Patch #27357 by Bruno Michel. * `gem rdoc` no longer overwrites built documentation. Use --overwrite force rebuilding. Patch #25982 by Akinori MUSHA. * Captial letters are now allowed in prerelease versions. Bug fixes: * Development deps are no longer added to rubygems-update gem so older versions can update sucessfully. * Installer bugs: * Prerelease gems can now depend on non-prerelease gems. * Development dependencies are ignored unless explicitly needed. Bug #27608 by Roger Pack. * `gem` commands * `gem which` now fails if no paths were found. Adapted patch #27681 by Caio Chassot. * `gem server` no longer has invalid markup. Bug #27045 by Eric Young. * `gem list` and friends show both prerelease and regular gems when --prerelease --all is given * Gem::Format no longer crashes on empty files. Bug #27292 by Ian Ragsdale. * Gem::GemPathSearcher handles nil require_paths. Patch #27334 by Roger Pack. * Gem::RemoteFetcher no longer copies the file if it is where we want it. Patch #27409 by Jakub Šťastný. Deprecation Notices: * lib/rubygems/timer.rb has been removed. * Gem::Dependency#version_requirements is deprecated and will be removed on or after August 2010. * Bulk index update is no longer supported. * Gem::manage_gems was removed in 1.3.3. * Time::today was removed in 1.3.3. ------------------------------------------------------------------------------ RubyGems installed the following executables: /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/gem
NOTE: This second command took over 60 seconds with no user feedback.
I was then able to successfully install cassandra via ruby’s gem package manager.
$ sudo gem install cassandra Building native extensions. This could take a while... Successfully installed thrift-0.2.0 Successfully installed thrift_client-0.4.0 Successfully installed simple_uuid-0.1.0 Successfully installed cassandra-0.7.5 4 gems installed Installing ri documentation for thrift-0.2.0... Enclosing class/module 'thrift_module' for class BinaryProtocolAccelerated not known Enclosing class/module 'thrift_module' for class BinaryProtocolAccelerated not known Installing ri documentation for thrift_client-0.4.0... Installing ri documentation for simple_uuid-0.1.0... Installing ri documentation for cassandra-0.7.5... Installing RDoc documentation for thrift-0.2.0... Enclosing class/module 'thrift_module' for class BinaryProtocolAccelerated not known Enclosing class/module 'thrift_module' for class BinaryProtocolAccelerated not known Installing RDoc documentation for thrift_client-0.4.0... Installing RDoc documentation for simple_uuid-0.1.0... Installing RDoc documentation for cassandra-0.7.5...
My use of cassandra_helper provided the following expected dependency error.
$ cassandra_helper cassandra Set the CASSANDRA_INCLUDE environment variable to use a non-default cassandra.in.sh and friends. (in /Library/Ruby/Gems/1.8/gems/cassandra-0.7.5) You need to install git 1.6 or 1.7
I found instructions to install git at Installing git (OSX) and installed via GUI installer.
I had to include to my current session path to get my Ruby Cassandra installation.
$ export PATH=/usr/local/git/bin:$PATH $ cassandra_helper cassandra Set the CASSANDRA_INCLUDE environment variable to use a non-default cassandra.in.sh and friends. (in /Library/Ruby/Gems/1.8/gems/cassandra-0.7.5) Checking Cassandra out from git Initialized empty Git repository in /Users/rbradfor/cassandra/server/.git/ remote: Counting objects: 16715, done. remote: Compressing objects: 100% (2707/2707), done. remote: Total 16715 (delta 9946), reused 16011 (delta 9364) Receiving objects: 100% (16715/16715), 19.22 MiB | 1.15 MiB/s, done. Resolving deltas: 100% (9946/9946), done. Updating Cassandra. Buildfile: build.xml clean: BUILD SUCCESSFUL Total time: 2 seconds HEAD is now at 298a0e6 check-in debian packaging Building Cassandra Buildfile: build.xml build-subprojects: init: [mkdir] Created dir: /Users/rbradfor/cassandra/server/build/classes [mkdir] Created dir: /Users/rbradfor/cassandra/server/build/test/classes [mkdir] Created dir: /Users/rbradfor/cassandra/server/src/gen-java check-gen-cli-grammar: gen-cli-grammar: [echo] Building Grammar /Users/rbradfor/cassandra/server/src/java/org/apache/cassandra/cli/Cli.g .... build-project: [echo] apache-cassandra-incubating: /Users/rbradfor/cassandra/server/build.xml [javac] Compiling 247 source files to /Users/rbradfor/cassandra/server/build/classes [javac] Note: Some input files use or override a deprecated API. [javac] Note: Recompile with -Xlint:deprecation for details. [javac] Note: Some input files use unchecked or unsafe operations. [javac] Note: Recompile with -Xlint:unchecked for details. build: BUILD SUCCESSFUL Total time: 42 seconds CASSANDRA_HOME: /Users/rbradfor/cassandra/server CASSANDRA_CONF: /Library/Ruby/Gems/1.8/gems/cassandra-0.7.5/conf Listening for transport dt_socket at address: 8888 DEBUG - Loading settings from /Library/Ruby/Gems/1.8/gems/cassandra-0.7.5/conf/storage-conf.xml ....
I was then able to complete the example at up and running with cassandra running via the ruby interactive console.
I was also able to fire up the cassandra-cli and see the data added in ruby.
$ bin/cassandra-cli -host localhost Connected to localhost/9160 cassandra> get Twitter.Statuses['1'] => (column=user_id, value=5, timestamp=1267072406503471) => (column=text, value=Nom nom nom nom nom., timestamp=1267072406503471) Returned 2 results. cassandra> get Twitter.UserRelationships['5']; => (super_column=user_timeline, (column=???!??zvZ+?!, value=1, timestamp=1267072426991872) (column=??-?!???C?th?, value=2, timestamp=1267072427019091)) Returned 1 results.
No sure about the data in the second example.