Rails エンジンの rake を使用してサンプル データをデータベースに追加する

StackOverflow https://stackoverflow.com/questions/1612409

質問

ユーザーが広告を表示/投稿/返信できる広告エンジンを作成して、Rails エンジンを試しています。

メイン アプリケーションにはユーザー認証とプロファイル用のコードが含まれており、広告機能を処理するために私が作成したエンジンもあります。

ここで、広告エンジンのデータベースにサンプル データを追加したいと思います。そこで、「vendor/plugins/classifieds/lib/tasks」に「sample_classifieds_data.rake」という rake ファイルを作成し、「vendor/plugins/classifieds/lib/tasks/sample_classifieds_data」に yml ファイルを追加しました。

rake ファイルのコードとサンプル yml ファイルはここにあります。 http://gist.github.com/216776

ここで問題は、rake タスクを実行すると、エラーはスローされませんが、データベースに値が設定されないことです。

何か案は?ところで、これは開発環境であり、データベースは開発データベースです。

同様の rake タスクを実行して、データベースにサンプル ユーザーを追加しました。これは機能しました。その rake ファイル「sample_data.rake」の場所は「lib/tasks」にありました。

役に立ちましたか?

解決

あなたのタスクはよく見えます。タスクが黙って失敗する原因となる唯一のものは、Fixture.newに渡すファイルがymlまたはcsvファイルを指していないことです。

putステートメントを変更して、インポートしたファイルの完全なパスを出力し、出力内容をディレクトリ構造と比較して二重チェックします。

たとえば、フィクスチャファイルが大文字で始まる場合、問題なくサイレントに失敗しますか? Categories.ymlの代わりにCategories.yml

他のヒント

rails edgeでは、 rake db:seed 機能を使用して、ベースにデータを追加できます。 コミットを見る

使い方はとても簡単です。

db / seeds.rb ファイルを作成します。
そして、データベースにシードするコードをそこに入れます。

例:

Category.create!(:name => 'My Category')
Country.create!(:name => 'Cassoulet Land')

そして、データベースをシードする場合、 rake db:seed

を実行できます。

何らかの理由でエッジを使用したくない場合(実稼働環境ではわかりやすい)、 Seed Fu プラグイン。これは非常に便利です。

db:seed タスクは Rails 2.3.4 で追加されました。したがって、エッジを実行する必要はありません。

http://weblog.rubyonrails.org/2009/9/4/ruby-on-rails-2-3-4

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top