Problem migrating to Ruby 1.9.2

Some assistance please - I have a Ruby project, which I started in Ruby
1.8.6/7, some time ago. It involves several custom data classes, which
can have up to 500 multi-field items in "lists". The size of the data
means that file storage is crucial, however, with the massive changes
made to yaml.rb in Ruby 1.9.n, I find that, although I can load existing
data from file, I can't find a way to save it back to file. Anyone got
any suggestions where to start?
I'd prefer using a proper database but can't get any of those to behave
properly either!!!

···

--
Posted via http://www.ruby-forum.com/.

It should work just the same. You need to show us some code and the actual error message and backtrace for us to be able to help.

···

On Feb 3, 2012, at 14:02 , Patrick Bayford wrote:

Some assistance please - I have a Ruby project, which I started in Ruby
1.8.6/7, some time ago. It involves several custom data classes, which
can have up to 500 multi-field items in "lists". The size of the data
means that file storage is crucial, however, with the massive changes
made to yaml.rb in Ruby 1.9.n, I find that, although I can load existing
data from file, I can't find a way to save it back to file. Anyone got
any suggestions where to start?

Some assistance please - I have a Ruby project, which I started in Ruby
1.8.6/7, some time ago. It involves several custom data classes, which
can have up to 500 multi-field items in "lists". The size of the data
means that file storage is crucial, however, with the massive changes
made to yaml.rb in Ruby 1.9.n, I find that, although I can load existing
data from file, I can't find a way to save it back to file. Anyone got
any suggestions where to start?

Did you consider using Marshal?

I'd prefer using a proper database but can't get any of those to behave
properly either!!!

What does that mean?

Kind regards

robert

···

On Fri, Feb 3, 2012 at 11:02 PM, Patrick Bayford <pbayford@talktalk.net> wrote:

--
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/

Just went back to it to get a copy of the errors, which were extensive,
and all related to the YAML module, and it is now working correctly. It
has been throwing errors since Wednesday, when I updated Ruby!!!
Thanks all.

···

--
Posted via http://www.ruby-forum.com/.

Yes, we fixed it by remote control. :wink:

-Dave

···

On Fri, Feb 3, 2012 at 18:02, Patrick Bayford <pbayford@talktalk.net> wrote:

Just went back to it to get a copy of the errors, which were extensive,
and all related to the YAML module, and it is now working correctly.

--
Dave Aronson: Available Cleared Ruby on Rails Freelancer
(NoVa/DC/Remote) -- see www.DaveAronson.com, and blogs at
www.Codosaur.us, www.Dare2XL.com, www.RecruitingRants.com

Robert Klemme wrote in post #1044013:

Some assistance please - I have a Ruby project, which I started in Ruby
1.8.6/7, some time ago. It involves several custom data classes, which
can have up to 500 multi-field items in "lists". The size of the data
means that file storage is crucial, however, with the massive changes
made to yaml.rb in Ruby 1.9.n, I find that, although I can load existing
data from file, I can't find a way to save it back to file. Anyone got
any suggestions where to start?

Did you consider using Marshal?

I'd prefer using a proper database but can't get any of those to behave
properly either!!!

What does that mean?

Kind regards

robert

I did try using Marshal, however, while the examples show how to use
dump & load for in memory use, there was not enough information for me
to get it to write to a file! I don't have enough Ruby experience yet to
work out how to do this sort of stuff - I'm a Pascal/Delphi man by
choice, and serializing objects is nearly all down to the coder.
As to the database comment, I have so far been unable to get mySQL
working with Ruby 1.9, and don't (yet) know enough SQLite to make it's
use practical. I have SQL Server too, but that has even poorer support
documentation, as far as Ruby is concerned. Most of my attempts have
failed at the connect stage.

···

On Fri, Feb 3, 2012 at 11:02 PM, Patrick Bayford <pbayford@talktalk.net> > wrote:

--
Posted via http://www.ruby-forum.com/\.

Dave Aronson wrote in post #1044017:

···

On Fri, Feb 3, 2012 at 18:02, Patrick Bayford <pbayford@talktalk.net> > wrote:

Just went back to it to get a copy of the errors, which were extensive,
and all related to the YAML module, and it is now working correctly.

Yes, we fixed it by remote control. :wink:

-Dave

I guessed as much!!! Seriously, wondering if something in the site code
got fixed, or altered.

--
Posted via http://www.ruby-forum.com/\.

Robert Klemme wrote in post #1044013:

Some assistance please - I have a Ruby project, which I started in Ruby
1.8.6/7, some time ago. It involves several custom data classes, which
can have up to 500 multi-field items in "lists". The size of the data
means that file storage is crucial, however, with the massive changes
made to yaml.rb in Ruby 1.9.n, I find that, although I can load existing
data from file, I can't find a way to save it back to file. Anyone got
any suggestions where to start?

Did you consider using Marshal?

I'd prefer using a proper database but can't get any of those to behave
properly either!!!

What does that mean?

I did try using Marshal, however, while the examples show how to use
dump & load for in memory use, there was not enough information for me
to get it to write to a file! I don't have enough Ruby experience yet to
work out how to do this sort of stuff - I'm a Pascal/Delphi man by
choice, and serializing objects is nearly all down to the coder.

The docs at Module: Marshal (Ruby 1.9.3)
mention that you can pass an IO object.

file_name = "foo.bin"

# store
File.open(file_name, 'wb') {|io| Marshal.dump(obj, io)}

# load
obj = File.open(file_name, 'rb') {|io| Marshal.load(io)}

You should take care that "obj" is an object containing everything you
want to serialize.

As to the database comment, I have so far been unable to get mySQL
working with Ruby 1.9, and don't (yet) know enough SQLite to make it's
use practical. I have SQL Server too, but that has even poorer support
documentation, as far as Ruby is concerned. Most of my attempts have
failed at the connect stage.

I'd try Marshal first. Much simpler to use and quite fast.

Kind regards

robert

···

On Sat, Feb 4, 2012 at 4:24 AM, Patrick Bayford <pbayford@talktalk.net> wrote:

On Fri, Feb 3, 2012 at 11:02 PM, Patrick Bayford <pbayford@talktalk.net> >> wrote:

--
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/

Robert Klemme wrote in post #1044064:

Did you consider using Marshal?

I'd prefer using a proper database but can't get any of those to behave
properly either!!!

What does that mean?

I did try using Marshal, however, while the examples show how to use
dump & load for in memory use, there was not enough information for me
to get it to write to a file! I don't have enough Ruby experience yet to
work out how to do this sort of stuff - I'm a Pascal/Delphi man by
choice, and serializing objects is nearly all down to the coder.

The docs at
Module: Marshal (Ruby 1.9.3)
mention that you can pass an IO object.

file_name = "foo.bin"

# store
File.open(file_name, 'wb') {|io| Marshal.dump(obj, io)}

# load
obj = File.open(file_name, 'rb') {|io| Marshal.load(io)}

You should take care that "obj" is an object containing everything you
want to serialize.

As to the database comment, I have so far been unable to get mySQL
working with Ruby 1.9, and don't (yet) know enough SQLite to make it's
use practical. I have SQL Server too, but that has even poorer support
documentation, as far as Ruby is concerned. Most of my attempts have
failed at the connect stage.

I'd try Marshal first. Much simpler to use and quite fast.

Kind regards

robert

Thanks for the assist Robert - marshal does indeed work - the key for me
was the IO reference, which is not well explained in the reference
material!
However, I have also discovered PStore, which is more convenient for me,
as it will keep several objects in the same file.
Example
require 'pstore'
require 'vwobjects'

#m2 = Minions.new()
#m2 = File.open('minions.bin', 'rb') {|io| Marshal.load(io)}

#m3 = Minions.new()
#m3 = File.open('specmins.bin', 'rb') {|io| Marshal.load(io)}

store = PStore.new("C:/temp/vwdata")
store.transaction do
   store['minions'] = m2
   store['special'] = m3
end

#Now reload data
store.transaction do
   puts "Roots: #{store.roots.join(', ')}"
   m2 = store['minions']
   puts"#{m2}"
   m3 = store['special']
   puts"#{m3}"
end
m2 and m3 being custom objects which enclose an array, facilitating use
as a list.

···

On Sat, Feb 4, 2012 at 4:24 AM, Patrick Bayford <pbayford@talktalk.net> > wrote:

--
Posted via http://www.ruby-forum.com/\.

No, the main advantage of PStore over plain vanilla Marshal is
transactional behavior - not the fact that you can store Hashes. A
Hash can be easily stored with Marshal as well. As I said: "You
should take care that "obj" is an object containing everything you
want to serialize." The only difference here is that with PStore you
can read and write individual key value pairs while with Marshal you
need to read and write the complete Hash. It is just an interface
thing though and PStore reads and writes the complete Hash internally
as well:

irb(main):010:0> f='x.pstore'
=> "x.pstore"
irb(main):013:0> ps = PStore.new f
=> #<PStore:0x202c55a4 @filename="x.pstore", @abort=false,
@ultra_safe=false, @thread_safe=false, @lock=#<Mutex:0x202c54dc>>

irb(main):014:0> ps.transaction {ps['a']=Time.now}
=> 2012-02-09 14:12:17 +0100
irb(main):015:0> File.open(f,'rb') {|io| Marshal.load(io)}
=> {"a"=>2012-02-09 14:12:17 +0100}

irb(main):016:0> ps.transaction {ps['b']=Time.now}
=> 2012-02-09 14:12:36 +0100
irb(main):017:0> File.open(f,'rb') {|io|Marshal.load(io)}
=> {"a"=>2012-02-09 14:12:17 +0100, "b"=>2012-02-09 14:12:36 +0100}

Kind regards

robert

···

On Thu, Feb 9, 2012 at 2:23 AM, Patrick Bayford <pbayford@talktalk.net> wrote:

Robert Klemme wrote in post #1044064:

On Sat, Feb 4, 2012 at 4:24 AM, Patrick Bayford <pbayford@talktalk.net> >> wrote:

Did you consider using Marshal?

I'd prefer using a proper database but can't get any of those to behave
properly either!!!

What does that mean?

I did try using Marshal, however, while the examples show how to use
dump & load for in memory use, there was not enough information for me
to get it to write to a file! I don't have enough Ruby experience yet to
work out how to do this sort of stuff - I'm a Pascal/Delphi man by
choice, and serializing objects is nearly all down to the coder.

The docs at
Module: Marshal (Ruby 1.9.3)
mention that you can pass an IO object.

file_name = "foo.bin"

# store
File.open(file_name, 'wb') {|io| Marshal.dump(obj, io)}

# load
obj = File.open(file_name, 'rb') {|io| Marshal.load(io)}

You should take care that "obj" is an object containing everything you
want to serialize.

As to the database comment, I have so far been unable to get mySQL
working with Ruby 1.9, and don't (yet) know enough SQLite to make it's
use practical. I have SQL Server too, but that has even poorer support
documentation, as far as Ruby is concerned. Most of my attempts have
failed at the connect stage.

I'd try Marshal first. Much simpler to use and quite fast.

Thanks for the assist Robert - marshal does indeed work - the key for me
was the IO reference, which is not well explained in the reference
material!
However, I have also discovered PStore, which is more convenient for me,
as it will keep several objects in the same file.

--
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/