2011-10-14 11 views
2

開発データを処理するためのベストプラクティスは、私は次のようなシナリオがあります。のRails:

を私は(6ヶ月程度)長いプロジェクトの開発を始めていると私は私をテストするために、データベース上のいくつかの情報を持っている必要があります特徴。問題は、今、私はこの情報を挿入するためのフォームを持っていない(私は将来的になるだろうが)DBにロードされた情報が必要である、これを処理する最善の方法は何か?アプリが完成すれば、私はもうこのプロセスは必要ないと考えています。

例として、分類する必要があるタスクがあるとします。私は作業を開始しましたが、私はいくつかのカテゴリを既にデータベースにロードしておく必要があります。

私はRails 3.1 btwで作業しています。

ありがとうございます!種について

編集

:私はあなたがすべての情報を削除し、再びそれを再挿入する必要があると思いますので、あなたのデータは、少し異なる場合があれば種子が進むべき道ではないことを言われてきました。言ってやるがいい。カテゴリを変更したり追加したりしたいのであれば、seeds.rbファイルを編集し、変更してからすべてのデータを削除してリロードしなければならない。または、この問題を解決するために、最も危険な方法で種を蒔いていますか?

+0

確かに:どのようなシードがあるのか​​を見ると、本当にルビーファイルに有効なものを作成してから、それ自身を実行することができます。 new_categories.rb。レーキの仕事をして、それだけでもやることができます。 –

+1

私は生産に使用するためには、アプリケーション内になければならないデータの種だけを使用します。あなたは、開発/テストデータ用のフィクスチャを使用するほうが良いかもしれません:http://guides.rubyonrails.org/testing.html#the-low-down-on-fixtures – Brian

答えて

2

にそれを取得するには、コマンドラインからrake db:seedが実行されます他のデータに混在するような方法でデータを追加、変更、または削除する可能性があります。だからseeds.rbが出ている。使用する必要があるのは移行です。こうすることで、シーケンシャルプロセスを通じて変更したいデータを検索して識別することができます。移行は正確に設計されています。それ以外の場合は、レールコンソールから手動でデータを変更することをお勧めします。

編集:良い例は以下の通りです。

展開を処理するためにCapistranoを使用しています。システムに新しいカテゴリー、おもちゃを追加したいとします。マイグレーションファイルでは、Category.create(:name => "Toys")などのマイグレーション機能をマイグレーション機能に追加します(私はRails 3.1でこれを呼び出すのを忘れていますが、ただ一つの方法しかありません)。rake db:migrateをローカルで実行し、変更をテストしてからコミットしてください受け入れ可能な場合はcap:deployを使用して展開し、運用データベースに対して新しい移行を実行し、新しいカテゴリを挿入して、展開されたアプリケーションで使用できるようにします。

この例では、実際にはワークフローによって異なります。移行を介して新しいデータを追加してもアプリケーションがうまくいかないと思ったら、それを検討してください。 DHH(David Heinemeier Hansson)は、データベースの構造を変更するために厳密にそれを使用しているので、そのファンではありません。 DHHがRailsの作成者であることを知らなかったら。

EDIT 2: あなたがそれに慣れていない場合は、マイグレーションを使用するという概念をスキップできます。あなたは100%あなたのdb/seeds.rbファイルに頼ることができます。 "seeds.rb"と考えると、情報を作成することを考えますが、必ずしもそうである必要はありません。ちょうど盲目的にデータを作成するのではなく、関連するデータがすでに存在するかどうかを確認し、変更して保存しますが、存在しない場合は単純に新しいレコードを作成します。

デシベル/ seeds.rb

toys = Category.find_by_name("Toys") 
if toys then 
    toys.name = "More Toys" 
    toys.save 
else 
    Category.create(:name => "More Toys") 
end 

実行rake db:seedsとそのコードが実行されます。データを変更するたびにseeds.rbファイルを一貫して更新するだけで、1)適切なデータ値を検索し、2)正しい属性を更新することができます。

最後に、これを行う正しい方法と間違った方法はありません。それはあなたとあなたのワークフローに適したものです。

+0

Mh、興味深い..私は移行はあなたのデータベースの構造を管理することを意図していると思った。あなたはそれのための例やリンクを提供できますか? – Deleteman

+0

RailsCastのエピソードで一度それを見ましたが、どちらを思い出しているのか分かりません。 Ryan Batesが何をしても純金のようなものです。私はそれを見つけることができるかどうかがわかります。 –

+0

私はあなたに例とseeds.rbを利用した追加の代替案を提供するために私の答えを更新しました。 –

0

開発データを読み込む場所はdb/seeds.rbです。そこに任意のRubyコードを書くことができるので、たとえば、devファイルを外部ファイルから読み込むことさえできます。

+0

あなたの素早い回答をありがとう、私の編集をご覧ください。 – Deleteman

0

あなたはそれを

user1=User.create(:email=>"[email protected]", 
    :first_name=>"user", 
    :last_name=>"name", 
    :bio=>"User bio...", 
    :website=>"http://www.website.com", 
    :occupation=>"WebDeveloper", 
    :password=>"changeme", 
    :password_confirmation=>"changeme", 
    :avatar => File.open(File.join(Rails.root, '/app/assets/images/profiles/image.png')) 
) 
user2=User.create(:email=>"[email protected]", 
    :first_name=>"user2", 
    :last_name=>"name2", 
    :bio=>"User2 bio...", 
    :website=>"http://www.website.com", 
    :occupation=>"WebDeveloper", 
    :password=>"changeme", 
    :password_confirmation=>"changeme", 
    :avatar => File.open(File.join(Rails.root, '/app/assets/images/profiles/image.png')) 
) 

を使用してレコードをインスタンス化することができますデシベル/ seeds.rb

と呼ばれるファイルには、ちょうどそうに聞こえるデシベル

+0

すぐにお返事ありがとうございます。私の編集をご覧ください。 – Deleteman