Forum: Ruby on Rails AR: How to store and restore in YML.

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
E51c6ae07e72cf04ef869868cb8eca6e?d=identicon&s=25 Jake Janovetz (Guest)
on 2006-01-02 01:20
Hello-

I have a database with entries that are segmented by customers.  I would
like to be able to store / delete / restore a particular customer's
information.  I will need to rebuild the rows on restore and also
rebuild the associations for the different tables.

For example,
customer {
  id
  name
}
companies {
  id
  customer_id    (belongs_to)
  name
}
contacts {
  id
  company_id     (belongs_to)
  name
}


So, if I just write out YML for the rows in this database, I'd end up
with something like:
Customer: id=34, name="Bob"
Company: id=134, customer_id=34, name="Intel"
Company: id=149, customer_id=34, name="Apple"
Contact: id=9383, company_id=134, name="Jerry"
Contact: id=8392, company_id=149, name="Robert"

The problem with this is that it is more difficult to regenerate those
rows because the associations would need to be broken and rebuilt.

What I would like to do is use the names in the YML output so I can
create records in a valid order, and do "finds" to find the right
records for associations. (Uniqueness is enforced so a find will find a
single record)

Customer: id=34, name="Bob"
Company: id=134, customer_id="Bob", name="Intel"
Company: id=149, customer_id="Bob", name="Apple"
Contact: id=9383, company_id="Intel", name="Jerry"
Contact: id=8392, company_id="Apple", name="Robert"

I am interested in hearing any rails/ruby tricks that would help me do
this for a number of different tables in the database.

Any suggestions?

   Jake
2b891e820c238ded365d035771603f21?d=identicon&s=25 Bill Walton (Guest)
on 2006-01-02 01:54
(Received via mailing list)
Greetings!

I'm new to Ruby and Rails and am working through the Curt Hibbs article.
I
created the model and controller per the article but I'm getting an
error
message (title: SystemStackError in Recipe#new; message: stack level too
deep) when I point my browser to http://127.0.0.1:3000/recipe/new

Any ideas what I'm doing wrong?  Any help is very much appreciated!

Best regards,
Bill
D8cb8c8cd40ddf0cd05241443a591868?d=identicon&s=25 Duane Johnson (Guest)
on 2006-01-02 01:57
(Received via mailing list)
On Jan 1, 2006, at 5:20 PM, Jake Janovetz wrote:

>   id
>   name
>
> Company: id=134, customer_id="Bob", name="Intel"
> Company: id=149, customer_id="Bob", name="Apple"
> Contact: id=9383, company_id="Intel", name="Jerry"
> Contact: id=8392, company_id="Apple", name="Robert"
>
> I am interested in hearing any rails/ruby tricks that would help me do
> this for a number of different tables in the database.
>
> Any suggestions?
>
Have you taken a look at the way ActiveRecord does ordered fixtures?
It uses YAML::Omap to ensure that the hashes are each inserted in
their proper order.

http://www.ruby-doc.org/stdlib/libdoc/yaml/rdoc/cl...

Duane Johnson
(canadaduane)
http://blog.inquirylabs.com/
E51c6ae07e72cf04ef869868cb8eca6e?d=identicon&s=25 Jake Janovetz (Guest)
on 2006-01-02 02:55
Duane Johnson wrote:
> Have you taken a look at the way ActiveRecord does ordered fixtures?
> It uses YAML::Omap to ensure that the hashes are each inserted in
> their proper order.
>
> http://www.ruby-doc.org/stdlib/libdoc/yaml/rdoc/cl...
>
> Duane Johnson
> (canadaduane)
> http://blog.inquirylabs.com/

Hi Duane-

Can you explain this a bit more?  I'm not sure how these ordered
fixtures fit into my question.

My primary concern isn't so much the order as it is recreating records
properly with new association IDs.  I can't create records with the same
ID because they may be added to a different database that may already
have those IDs.

   Jake
8ed6d55dddf47e0974bac833f08e4390?d=identicon&s=25 Ian Harding (Guest)
on 2006-01-02 06:10
(Received via mailing list)
ulimit -s 8192

before starting the webrick
2b891e820c238ded365d035771603f21?d=identicon&s=25 Bill Walton (Guest)
on 2006-01-02 07:38
(Received via mailing list)
Hi Ian,

That looks like a unix/linux command line entry.  I'm working on Win2K.
Any
idea how to accomplish the equivalent on that platform?

Thanks!
Bill


----- Original Message -----
From: "Ian Harding" <harding.ian@gmail.com>
To: <rails@lists.rubyonrails.org>
Sent: Sunday, January 01, 2006 11:08 PM
Subject: Re: [Rails] Newbie problem with RoR - stack level too deep


ulimit -s 8192

before starting the webrick


On 1/2/06, Bill Walton <bill.walton@charter.net> wrote:
> Greetings!
>
> I'm new to Ruby and Rails and am working through the Curt Hibbs article.
I
> Rails@lists.rubyonrails.org
> http://lists.rubyonrails.org/mailman/listinfo/rails
>
_______________________________________________
Rails mailing list
Rails@lists.rubyonrails.org
http://lists.rubyonrails.org/mailman/listinfo/rails
2073c7e0e7d2311727b680a887a375be?d=identicon&s=25 Leon Leslie (Guest)
on 2006-01-02 12:36
(Received via mailing list)
It may be a sign of an indefinite recursive loops
4feed660d3728526797edeb4f0467384?d=identicon&s=25 Bill Kelly (Guest)
on 2006-01-02 12:45
(Received via mailing list)
>
> ulimit -s 8192
>
> before starting the webrick

I'm not familiar with the Curt Hibbs article mentioned, but is there
supposed to be a deeply recursive function?  I'm guessing you're seeing
the SystemStackError because there may be some unintended infinite
recursion in your code.

That is, for whatever reason, it sounds like your Recipe#new may be
getting into an infinite loop, recursively.

I'm a Rails newbie myself so I don't know what to suggest other than
looking at the backtrace from the SystemStackError exception: it will
show who-called-whom-called-whom-called-whom.... and might illuminate
the problem.


Hope this helps,

Bill
2b891e820c238ded365d035771603f21?d=identicon&s=25 Bill Walton (Guest)
on 2006-01-02 18:17
(Received via mailing list)
I don't think the stack problem I'm having is a result of code I wrote.
That's because I haven't written any code, per se ;-)  My current
hypothesis
is that I either have something wrong installed, or something installed
wrong.

My current config (as reported by 'ruby -v', 'gem -v', 'rails -v',
'mysql
\s' and 'ruby script\server') is:
Ruby: 1.8.2 (2004-12-25) [i386-mswin32]
gem: 0.8.3
Rails: 0.14.3
MySQL: 4.1.16-nt
WEBrick: 1.3.1

The article I referred to is "Rolling with Ruby on Rails."  It's at:
http://www.onlamp.com/pub/a/onlamp/2005/01/20/rails.html

WRT background info, I'm working through it on a fresh Win2K
installation.
The RoR install went fairly well.  The only significant problem I had
was
with the Rails install.  Apparently the gems package that ships with the
Windows installer is out of date and I had to bring it up to date with a
"gems install rails -v 0.14.3".  That got me to a "Rails installed
successfully" message.

The only config issue that *jumped* out at me was that the article
instructed me to 'Download the latest "essential" version of of the
MySQL
Windows installer (Currently, that is Windows Essentials (x86) 4.1.7)'.
ALL
the versions available for download at
dev.mysql.com/downloads/mysql/4.1.html are 4.1.16, not 4.1.7.  Initially
I
thought that the version info at mysql.com was a typo.  Now I'm not so
sure.

The article took me through using Rails to generate a simple controller
to
display text on a web page just fine.  The problem showed up with the
use of
the database.

I set up the database, table, and fields per the article with no problem
(There was one surprise in that the article included an "important note"
to
the effect that MySQL would name the primary key 'Id' and I'd need to
change
it to 'id' to make Rails happy.  In fact, MySQL named it 'id' so I
didn't
need to change it.)

I used 'ruby script\generate model Recipe' and 'ruby script\generate
controller Recipe' and the expected files (per the article) were
generated.
Pointing my browser at 'http://127.0.0.1:3000/recipe/new' resulted in a
page
being displayed with the message
"Unknown action
no action responded to new"
That's pretty much what I expected.

The stack problem happened when I added the 'scaffold :recipe' line to
'recipe_controller.rb'  Pointing my browser to the same URL now
generates
the error page.  It looks like somewhere over 1000 identical lines of
"c:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.13.0/lib/active_record/callba
cks.rb:236:in `initialize_without_callbacks'".  That section is followed
by
a 40-50 calls that include webrick.  The last line of the error message
says
"script/server:3"  I can send along the page itself with all the calls
listed if that's of any help.

Does any of this help?  I'm pretty impressed with RoR based on the
article.
Now if I could only get it to WORK ;-(

Thanks in advance to anyone who can help.

Best regards,
Bill

----- Original Message -----
From: "Bill Kelly" <billk@cts.com>
To: <rails@lists.rubyonrails.org>
Sent: Monday, January 02, 2006 5:44 AM
Subject: Re: [Rails] Newbie problem with RoR - stack level too deep


> > On 1/2/06, Bill Walton <bill.walton@charter.net> wrote:
> >>
> >> I'm new to Ruby and Rails and am working through the Curt Hibbs
article.
> >> I created the model and controller per the article but I'm getting an
error
> >> message (title: SystemStackError in Recipe#new; message: stack level
too
2b891e820c238ded365d035771603f21?d=identicon&s=25 Bill Walton (Guest)
on 2006-01-02 18:58
(Received via mailing list)
Is there supposed to be a MySQL gem installed for the example in the RoR
article to work?  If so, how / where do I get it?  I previously did a
'gem
update'.

The files in c:\ruby\lib\ruby\gems\1.8\gems\ are:
actionmailer-1.1.3
actionpack-1.11.0
actionwebservice-0.9.3
activerecord-1.13.0
activesupport-1.2.3
fxruby-1.2.2-mswin32
fxruby-1.4.3-mswin32
rails_analyzer_tools-1.1.0
rails-0.14.3
rake-0.6.2
sources-0.0.1

Thanks,
Bill

----- Original Message -----
From: "Bill Walton" <bill.walton@charter.net>
To: <rails@lists.rubyonrails.org>
Sent: Monday, January 02, 2006 11:01 AM
Subject: Re: [Rails] Newbie problem with RoR - stack level too deep


> I don't think the stack problem I'm having is a result of code I wrote.
> That's because I haven't written any code, per se ;-)  My current
hypothesis
>
> The only config issue that *jumped* out at me was that the article
> instructed me to 'Download the latest "essential" version of of the MySQL
> Windows installer (Currently, that is Windows Essentials (x86) 4.1.7)'.
ALL
> the versions available for download at
> dev.mysql.com/downloads/mysql/4.1.html are 4.1.16, not 4.1.7.  Initially I
> thought that the version info at mysql.com was a typo.  Now I'm not so
sure.
>
> The article took me through using Rails to generate a simple controller to
> display text on a web page just fine.  The problem showed up with the use
of
> the database.
>
> I set up the database, table, and fields per the article with no problem
> (There was one surprise in that the article included an "important note"
to
> the effect that MySQL would name the primary key 'Id' and I'd need to
change
> it to 'id' to make Rails happy.  In fact, MySQL named it 'id' so I didn't
> need to change it.)
>
> I used 'ruby script\generate model Recipe' and 'ruby script\generate
> controller Recipe' and the expected files (per the article) were
generated.
> Pointing my browser at 'http://127.0.0.1:3000/recipe/new' resulted in a
page
> being displayed with the message
> "Unknown action
> no action responded to new"
> That's pretty much what I expected.
>
> The stack problem happened when I added the 'scaffold :recipe' line to
> 'recipe_controller.rb'  Pointing my browser to the same URL now generates
> the error page.  It looks like somewhere over 1000 identical lines of
>
"c:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.13.0/lib/active_record/callba
> cks.rb:236:in `initialize_without_callbacks'".  That section is followed
by
> a 40-50 calls that include webrick.  The last line of the error message
says
> "script/server:3"  I can send along the page itself with all the calls
> listed if that's of any help.
>
> Does any of this help?  I'm pretty impressed with RoR based on the
article.
4feed660d3728526797edeb4f0467384?d=identicon&s=25 Bill Kelly (Guest)
on 2006-01-02 19:59
(Received via mailing list)
From: "Bill Walton" <bill.walton@charter.net>
> activesupport-1.2.3
> fxruby-1.2.2-mswin32
> fxruby-1.4.3-mswin32
> rails_analyzer_tools-1.1.0
> rails-0.14.3
> rake-0.6.2
> sources-0.0.1

I found this via: gem list --remote

  mysql (2.7, 2.6, 2.5.1)
    MySQL/Ruby provides the same functions for Ruby programs that the
    MySQL C API provides for C programs.


Hope this helps,

Bill
4feed660d3728526797edeb4f0467384?d=identicon&s=25 Bill Kelly (Guest)
on 2006-01-02 20:15
(Received via mailing list)
>> activerecord-1.13.0
>  mysql (2.7, 2.6, 2.5.1)
>    MySQL/Ruby provides the same functions for Ruby programs that the
>    MySQL C API provides for C programs.

Also, as you're on Windows - had you been aware of Instant Rails?

  http://instantrails.rubyforge.org/wiki/wiki.pl


Regards,

Bill
D8cb8c8cd40ddf0cd05241443a591868?d=identicon&s=25 Duane Johnson (Guest)
on 2006-01-02 23:24
(Received via mailing list)
On Jan 1, 2006, at 6:55 PM, Jake Janovetz wrote:

>> http://blog.inquirylabs.com/
> have those IDs.
>
>    Jake
>

Sorry about that, Jake.  When I saw your remark about "valid order" I
understood this to be a problem of inserting records in the correct
order (given database integrity constraints).  Now I see that you're
talking about referencing a record by some unique part other than the
primary key (which changes from DB to DB).

I don't know of any trick in the books that would do what you're
trying to--other than creating a dictionary of IDs that help
transition from the old IDs to the new ones.  I wish I could be of
more help.

Regards,
Duane Johnson
(canadaduane)
http://blog.inquirylabs.com/
E51c6ae07e72cf04ef869868cb8eca6e?d=identicon&s=25 Jake Janovetz (Guest)
on 2006-01-02 23:42
> Sorry about that, Jake.  When I saw your remark about "valid order" I
> understood this to be a problem of inserting records in the correct
> order (given database integrity constraints).  Now I see that you're
> talking about referencing a record by some unique part other than the
> primary key (which changes from DB to DB).
>
> I don't know of any trick in the books that would do what you're
> trying to--other than creating a dictionary of IDs that help
> transition from the old IDs to the new ones.  I wish I could be of
> more help.
>
> Regards,
> Duane Johnson
> (canadaduane)
> http://blog.inquirylabs.com/

Thanks Duane-

For the moment, I'm brute forcing it.  When I export the YAML, I change
the IDs into the strings of the records they represent (ie,
person.name).  This is a bit easier than doing the dictionary approach,
but not as elegant.

I don't expect to do this often, really.  It's primarily there so I can
setup "DEMO" data on a nightly basis from the same record set.

   JAke
2b891e820c238ded365d035771603f21?d=identicon&s=25 Bill Walton (Guest)
on 2006-01-03 00:34
(Received via mailing list)
Greetings all,

I'm quickly getting to the "bang head here" stage so any help is
awfully,
terribly, desperately, appreciated ;-)

Looking at my previous email it hit me that I didn't have a mySQL gem
and
needed to do 'gem install mysql'.   That added a 'mysql 4.7' directory
to
the ones I listed in my previous email.  Cool!, I thought.  Just like I
thought.  There was something I hadn't done.  Unfortunately, the gem
install
ultimately failed with 'ERROR: Failed to build gem native extension'
message
(there was more if it's of any interest).  It looked like a compile-type
set
of errors.

(QUESTION:  Do I need to remove the stuff that gem installed?  With the
mysql.so executable installed as noted below, is this stuff still
needed?)

While I was waiting for gem, I found the same thing Bill sent along
below
at: http://www.tmtm.org/en/mysql/ruby/  My problem is that it needs to
be
compiled and I don't have a C compiler installed on the system I'm
working
on.  Also, and not as easily addressed, it's been so long since I did
any
serious programming, much less set up a development environment, I'd
probably just screw it up ;-(

I did some more hunting and found
http://wiki.rubyonrails.org/rails/pages/HowToUseMy...
GREAT!!! I thought.  Here it was; the executable I needed, along with
feedback from other newbies that it worked.  So I put MSVCR70.dll in
c:\ruby\bin (even downloaded a new one based on one of the comments on
the
wiki) and I put mySQL.so in c:\ruby\lib\ruby\1.8\i386-mswin32 and I
rebooted
my system and....

The damn thing is still broke.  I'm still getting the same stack level
too
deep error.  But wait.  There's more!

There's been an interesting (and I'm hoping informative) change in
behavior.
When I pointed my browser at http://127.0.0.1:3000/recipe/new I got the
stack overflow error.  When I pointed it at http://127.0.0.1:3000/recipe
though I got a page that had a three lines on it.
Listing recipes
Title Instructions
New recipe (NOTE: this is a hyperlink)

Maybe *something's* working?

When I clicked on New recipe I got the stack problem.

When I used the browser's Back arrow, WEBrick shut down due to a
segmentation fault.

I'm optimistic about RoR and looking forward to using it.  I sure would
appreciate some help getting it set up correctly.

Thanks,
Bill

> Bill Kelly" wrote:


> From: "Bill Walton" <bill.walton@charter.net>
> >
> > Is there supposed to be a MySQL gem installed for the example in the RoR
> > article to work?  If so, how / where do I get it?  I previously did a
'gem
59de94a56fd2c198f33d9515d1c05961?d=identicon&s=25 Tom Mornini (Guest)
on 2006-01-03 01:28
(Received via mailing list)
On Jan 2, 2006, at 6:20 PM, Bill Walton wrote:

> The damn thing is still broke.  I'm still getting the same stack
> level too
> deep error.  But wait.  There's more!

Generally, that would mean you have an endless recursion.

>
> Maybe *something's* working?

Yes, it would appear that ActiveRecord can talk to the DB, or that
wouldn't
happen.

--
-- Tom Mornini
2b891e820c238ded365d035771603f21?d=identicon&s=25 Bill Walton (Guest)
on 2006-01-03 03:21
(Received via mailing list)
Hi Tom.

Tom Mornini wrote:


> On Jan 2, 2006, at 6:20 PM, Bill Walton wrote:
>
> > The damn thing is still broke.  I'm still getting the same stack
> > level too deep error.  But wait.  There's more!
>
> Generally, that would mean you have an endless recursion.

[BW] The loop is large, but not endless.

The stack problem happened when I added the 'scaffold :recipe' line to
'recipe_controller.rb'  That addition is the first and only 'coding'
I've
done to this point.  Pointing my browser to localhost:3000/recipe/new
generates the error page.  The first 1000+ lines are identical:
"c:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.13.0/lib/active_record/callba
cks.rb:236:in "initialize_without_callbacks'".  That's followed by
another
40-50 lines, the last 20 or so are either to WEBrick specifically or
look
related.

The last two lines of the error message are:
c:/ruby/lib/ruby/gems/1.8/gems/activesupport-1.2.3/lib/active_support/depend
encies.rb:214:in `require'
script/server:3

I can send along the whole page with all the calls listed if you're
interested in seeing it.

> > There's been an interesting (and I'm hoping informative) change in
> > behavior. When I pointed my browser at http://127.0.0.1:3000/recipe/new
> > I got  the stack overflow error.  When I pointed it at
http://127.0.0.1:3000/
> > recipe though I got a page that had a three lines on it.
> > Listing recipes
> > Title Instructions
> > New recipe (NOTE: this is a hyperlink)
> >
> > Maybe *something's* working?
> > Yes, it would appear that ActiveRecord can talk to the DB, or that
> wouldn't happen.

[BW]  I'm going to go out on a limb here, being such a Ruby Nuby (I just
picked up Hibbs' "Rolling with Ruby on Rails" article and started
working
through it yesterday).  If I understand what you're saying, then your
impression is that the problem at this point is not with the mySQL
setup,
but with Rails.  Is that right?  Any ideas re: where I go from here?

Thanks,
Bill
C475cffda1800fbc3f3af17bc10c220f?d=identicon&s=25 Curt Hibbs (Guest)
on 2006-01-03 03:30
(Received via mailing list)
It might be easier to just use Instant Rails:

   http://instantrails.rubyforge.org/

Curt
8ed6d55dddf47e0974bac833f08e4390?d=identicon&s=25 Ian Harding (Guest)
on 2006-01-11 22:00
(Received via mailing list)
Oops.  Sorry, no.  I found that i had to increase the stacksize just
to get things to work, but also that if I had an infinite recursion, I
got the same error.  I still don't know what is causing the infinite
recursion but i thas to do with validates_associated.  Try commenting
out validations until it goes away?!

On 1/2/06, Bill Walton <bill.walton@charter.net> wrote:
> From: "Ian Harding" <harding.ian@gmail.com>
> On 1/2/06, Bill Walton <bill.walton@charter.net> wrote:
> > Best regards,
>
--
"Her faults were those of her race and sex; her virtues were her own.
Farewell, and if for ever - "

-- "Travels with a Donkey in the Cevennes" by Robert Louis Stevenson
97cbca14d17274370cce501bbea7980a?d=identicon&s=25 Mike Harris (Guest)
on 2006-01-12 16:45
(Received via mailing list)
You don't want to increase your stack size.  The problem is the infinite
recursion, you need to fix that.

http://z.iwethey.org/forums/render/content/show?co...

I had the same problem, no idea why it happens to certain people, must
be some weird interplay of the versions.  The last post in this thread,
by Arkadiy:

---------------------------
I did manage to get my app working by loading ActiveRecord explicitly in
boot.rb, like this:

require 'rubygems'
require_gem 'activerecord' # this is my new line
require 'initializer'


I have no idea why most people don't have this problem...
------

179. I will not outsource core functions.
--
. <http://omega.med.yale.edu/%7Epcy5/misc/overlord2.htm> [*]
<http://omega.med.yale.edu/%7Epcy5/misc/overlord2.htm>
-----------------------------------------
This topic is locked and can not be replied to.