Hello there,
I have an issue when putting an ActiveRecord model into the Rails.cache.
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 = Product.find_by_gtin(“9781418133399”)
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
from
/Users/dkam/Development/Booko/mysql2/ruby/1.9.1/gems/activesupport-3.2.2/lib/active_support/core_ext/time/marshal.rb:54:in _dump' from /Users/dkam/Development/Booko/mysql2/ruby/1.9.1/gems/activesupport-3.2.2/lib/active_support/core_ext/time/marshal.rb:54:in_dump’
from
/Users/dkam/Development/Booko/mysql2/ruby/1.9.1/gems/activesupport-3.2.2/lib/active_support/cache.rb:561:in dump' from /Users/dkam/Development/Booko/mysql2/ruby/1.9.1/gems/activesupport-3.2.2/lib/active_support/cache.rb:561:ininitialize’
from
/Users/dkam/Development/Booko/mysql2/ruby/1.9.1/gems/activesupport-3.2.2/lib/active_support/cache.rb:363:in new' from /Users/dkam/Development/Booko/mysql2/ruby/1.9.1/gems/activesupport-3.2.2/lib/active_support/cache.rb:363:inblock in write’
from
/Users/dkam/Development/Booko/mysql2/ruby/1.9.1/gems/activesupport-3.2.2/lib/active_support/cache.rb:520:in instrument' from /Users/dkam/Development/Booko/mysql2/ruby/1.9.1/gems/activesupport-3.2.2/lib/active_support/cache.rb:362:inwrite’
from (irb):141
from
/Users/dkam/Development/Booko/mysql2/ruby/1.9.1/gems/railties-3.2.2/lib/rails/commands/console.rb:47:in start' from /Users/dkam/Development/Booko/mysql2/ruby/1.9.1/gems/railties-3.2.2/lib/rails/commands/console.rb:8:instart’
from
/Users/dkam/Development/Booko/mysql2/ruby/1.9.1/gems/railties-3.2.2/lib/rails/commands.rb:41:in <top (required)>' from script/rails:6:inrequire’
from script/rails:6:in `’
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 ) –
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?
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?
Ah, interesting –
1.9.2-p290 :008 > user.invitation_sent_at.class
=> ActiveSupport::TimeWithZone
…
1.9.2-p290 :010 > Rails.cache.write(“user_invitation_sent_at”,
user.invitation_sent_at)
ArgumentError: year too big to marshal: 1899 UTC
from
/Users/hassan/.rvm/gems/ruby-1.9.2-p290@happyhouse/gems/activesupport-3.2.2/lib/active_support/core_ext/time/marshal.rb:54:in
`_dump’