Pre-populate db with yaml outside of testing?


#1

Hi.

What is the best way to pre-populate your database with records while
developing, not testing?

For example, I want to:

  1. [run this command to populate db]

  2. ruby script/server

  3. now I can surf to localhost:3000 and my app will already have
    relevant
    data

I’m hoping to use yaml to suck it in.

Is there a way to use the Fixture class to handle this even though this
is
outside the typical testing methods?

Thanks,
Zack


#2

That is a great question. I’ll be intersted to see the answers.

I use mysql to do this for me.

Basically, I create a file called data_load.sql. Rows in it look like
this-

INSERT INTO table (‘field_1’, ‘field_2’) VALUES (‘value 1’, ‘value 2’);

Then every time I blow my development db away, I run -
mysql -u <> -p<> database_name < data_load.sql

I think it would be better to use yml because doing what I describe
above is
not DRY. I am always setting up the testing yml fixtures, and writting
insert commands in my data_load.sql for the same records. To me, that
seems
like the worst kind of unDRYness.

matt


#3

On Fri, Jan 20, 2006 at 12:00:08PM -0800, Zack C. wrote:

Is there a way to use the Fixture class to handle this even though this is
outside the typical testing methods?

As always, rake is your best friend. Run “rake load_fixtures” and all
of
the data in your fixtures will end up in the current environment’s
database
(default: development, but I presume that RAILS_ENV=production rake
load_fixtures would do the obvious thing).

  • Matt


A few minutes ago I attempted to give a flying fsck, but the best I
could do
was to watch it skitter across the floor.
– Anthony de Boer, ASR


#4

Matthew P. wrote:

As always, rake is your best friend. Run “rake load_fixtures” and all of
the data in your fixtures will end up in the current environment’s database
(default: development, but I presume that RAILS_ENV=production rake
load_fixtures would do the obvious thing).

That’s all well and good… but is there an easy way to keep a set of
fixtures for development that are different from the set you use for
testing?

thanks,
j


#5

I am surprised this has not come up earlier. How do most people
pre-populate lookup values in the database? I was hoping there would
be a structure similar to mocks (mocks/development and mocks/test) in
the fixtures directory. If you build it like this then you are able to
satisfy all of the different environments. I definitely don’t want my
test data to be pushed into my database. Any suggestions would be
great.


#6

Here is a blog post by topfunky that might do what you are looking for:

http://nubyonrails.topfunky.com/articles/2005/12/27/dump-or-slurp-
yaml-reference-data

Cheers-
-Ezra

On Jan 21, 2006, at 9:32 AM, Carl F. wrote:

As always, rake is your best friend. Run “rake load_fixtures”
thanks,
Rails mailing list
removed_email_address@domain.invalid
http://lists.rubyonrails.org/mailman/listinfo/rails

-Ezra Z.
WebMaster
Yakima Herald-Republic Newspaper
removed_email_address@domain.invalid
509-577-7732


#7

Thanks Ezra - I had looked at this as a possibility.

rake load_fixtures
works great for now.

Zack