On 23/03/2012, at 2:04 PM, Hassan Schroeder wrote:

> On Thu, Mar 22, 2012 at 7:11 PM, dkam <[email protected]> wrote:
> 
>>  The issue seems to be caused by the published_on column, which is a MySQL
>> datetime column and supports dates between  '1000-01-01 00:00:00' and
>> '9999-12-31 23:59:59'.  However Rails appears to load this into a class
>> which can't support a similar range of dates:
> 
>>> p.published_on
>> => Sun, 01 Jan 1899 00:00:00 EST +10:00
>> 
>>> Rails.cache.write("test", p)
>> ArgumentError: year too big to marshal: 1898 UTC
> 
> Perhaps not helpful, but no issue here ( also with Rails 3.2.2,
> MySQL 5.5.19, cache_store => :file_store ) --
> 
> 1.9.2-p290 :002 > oldtimes = Date.new(1899, 1, 1)
> => Sun, 01 Jan 1899
>   ... snip thumb-fingered-ness
> 1.9.2-p290 :004 > oldtimes.to_datetime
> => Sun, 01 Jan 1899 00:00:00 +0000
> 1.9.2-p290 :005 > Rails.cache.write("oldtimes", oldtimes)
> => true
> 1.9.2-p290 :006 > Rails.cache.read("oldtimes")
> => Sun, 01 Jan 1899
> 1.9.2-p290 :007 > user = User.last
>   ....
> 1.9.2-p290 :009 > user.invitation_sent_at= oldtimes
> => Sun, 01 Jan 1899
> 1.9.2-p290 :010 > user.save!
>   (0.7ms)  BEGIN
>   (8.3ms)  UPDATE `users` SET `invitation_sent_at` = '1899-01-01
> 08:00:00', `updated_at` = '2012-03-23 02:49:16' WHERE `users`.`id` = 5
>   (0.9ms)  COMMIT
> => true
> 1.9.2-p290 :011 >

The issue is with pushing an ActiveSupport::TimeWithZone into the cache, rather 
than a Date or DateTime in your example.  When you load the user from the, is 
the invitation_sent_at an ActiveSupport::TimeWithZone? And if it is, can you 
put the user in the cache? 

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to