Adventures into CouchDB and Rails

June 9, 2009

How to Fill up a CouchDB with Twitter Statuses

Filed under: Uncategorized — zdzolton @ 2:08 pm

Last night I hacked together a bit of Ruby code to fill a CouchDB database with Twitter statuses. I’ll need to make some adjustments to deal with Twitter’s timeout and throttling, however…

Enjoy!

February 6, 2009

Rails Time Zone Bug — An Edge Case

Filed under: Uncategorized — zdzolton @ 1:02 am

Premise

I have found a Mac OS X-specific edge case in the Rails time zone support.

Evidence

irb(main):001:0> require 'rubygems'; require 'activesupport'
=> true
irb(main):002:0> ENV['TZ'] = 'US/Central'
=> "US/Central"
irb(main):003:0> t = Time.now
=> Thu Feb 05 16:03:56 -0600 2009
irb(main):004:0> t.to_s :json
=> "Thu Feb 05 16:03:56 -0600 2009"
irb(main):005:0> t.to_s :rfc822
=> "Thu, 05 Feb 2009 16:03:56 -0500"

Notice that when invoking Time#to_s method, and providing the parameter :rfc822, the UTC

Solution

A small modification to the :rfc822 format specifier in DATE_FORMATS hash, defined within the ActiveSupport::CoreExtensions::Time::Conversions module, does the trick.

Specifically, line #13 of activesupport/lib/active_support/core_ext/time/conversions.rb:

          :rfc822       => "%a, %d %b %Y %H:%M:%S %z"

Should be changed to this:

          :rfc822       => lambda { |time| time.strftime("%a, %d %b %Y %H:%M:%S #{time.formatted_offset(false)}") } 

Background

This is related to my previous blog post, in which I found a similar bug in the serialization of CouchSurfer::Model timestamps.

I am currently testing this on Mac OS X 10.5.6.

February 4, 2009

CouchSurfer – Timezone Problems

Filed under: Uncategorized — zdzolton @ 3:37 pm

Problem Definition

There seems to be a timezone-related bug for the CouchSurfer::Model::ClassMethods.timestamps! method.

Symptoms

Here is the failing RSpec example:

1)
'CouchSurfer::Model a model with timestamps should set the time on create' FAILED
expected: < 2,
     got:   3600.004118
./spec/lib/model_spec.rb:532:

Finished in 13.386698 seconds

107 examples, 1 failure

Root Cause

The problem seems to lie in line #158:

self['updated_at'] = time.strftime("%Y/%m/%d %H:%M:%S.#{time.usec} %z")

In particular, the %z used in the format specifier, performs unreliably across operating systems.

Evidence

When executing this on an Ubuntu server to which I have access:

$ irb
irb(main):001:0> ENV['TZ'] = 'US/Central'
=> "US/Central"
irb(main):002:0> Time.now
=> Wed Feb 04 09:12:34 -0600 2009
irb(main):003:0> Time.now.strftime("%z")
=> "-0600"
Now, when I execute this code on my local Mac OS X 10.5.6 machine:
$ irb
irb(main):001:0> ENV['TZ'] = 'US/Central'
=> "US/Central"
irb(main):002:0> Time.now
=> Wed Feb 04 09:15:19 -0600 2009
irb(main):003:0> Time.now.strftime("%z")
=> "-0500"

Notice how the %z resulted in “-0500” on Mac OS X, instead of “-0600” as it should have.

Solution

I added a helper method to CouchSurfer::Model, named format_utc_offset, that returns a the correct UTC offset string. This was basically adapted from the ActiveSupport Time#formatted_offset code in Rails.

You can see the changes made in my fork.

January 31, 2009

The Couch Underground, Part I

Filed under: Uncategorized — Tags: , , , — zdzolton @ 6:02 am

I aim to use CouchDB, compatibly with Rails; I’ll take any suggestion…

Should you have any, just tweet me.

January 29, 2009

Hello Again, World!

Filed under: Uncategorized — zdzolton @ 4:56 am

I’m here to discuss my adventures into the realm of CouchDB and Rails…

Let’s have fun!

Create a free website or blog at WordPress.com.