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.