Comments on How do I force db:seed to forget previous context and load only what is in the flags YAML file?
Parent
How do I force db:seed to forget previous context and load only what is in the flags YAML file? Question
In my dev environment I'm editing the flags in db/seeds/post_flag_types.yml
. After editing I run rails db:seed
, which adds my new flag. Fine so far.
However, I had a typo in the name, so I edited to fix it, ran rails db:seed
again, and now I have two flags. Running seeds added flags it didn't already know about, but didn't detect the absence of a previously-defined flag and remove it.
I understand why that's desirable as a default; we wouldn't want to nuke flags that have actually been used without considering the effects on flag history. But in this case, I want to override -- I want to tell db:seed
to forget what it knows and load these flags anew.
How do I do that? I found UPDATE_POSTS=true rails db:seed
in a section about updating the seeded help and that doesn't sound like it would apply, but I tried it anyway. As expected, it didn't replace the flag seeds.
Post
This is the difference between refreshing the database and seeding the database.
db:seed
does what it says on the tin - seeds the database. That means it adds pre-defined data to the database. It doesn't care about what's already there - to the extent that if you don't have appropriate constraints set up, it'll add the same data every time, regardless of if it already exists or not.
If you want a completely clear database with only a set of fresh seeds in it, drop the database first:
rails db:drop
rails db:create
rails db:schema:load
rails db:seed
If you just have one mistaken seed in there that needs removing, db:seed
won't do that because that's not what it's meant for - you'll need to remove the erroneous entry manually, either via Rails console or via SQL.
0 comment threads