2015-09-16 11 views
10

私はこのスキーマを持っている:Phoenixアプリケーションの起動時にデータベースを事前入力する方法は?

schema "editables" do 
    field :title, :string 
    field :content, :binary 
    timestamps 
end 

私はアプリケーションにそのことを伝えたい、いくつかの行が自動的に作成され、人口た起動、私は含む:titleフィールドを持つ6つのエントリを作成したいと言う:ページ1、PAGE2を,. .. 私はそれをするべきですか?

+0

アプリケーションを起動するたびにこれらを挿入しますか?これはちょっと匂いがする。 –

+0

はい。アプリケーションが起動するとすぐに。プロダクションでは、これは問題ではありません。私の目標は、これをユーザーがHTML版用に使用することです。 HTMLの 'content editable'を使って編集可能ないくつかの事前定義されたフィールドを持っているのはいいですが、HTMLとしてハードコードされています。これに奇妙なことはありますか? –

+0

'editable'が作成されたときにフォームの初期値を設定できませんか? –

答えて

15

私の提案:データベースを作成するスクリプトファイルを作成します。さんはpriv/repo/seeds.exsそれを呼ぶことにしましょう:

開発で
alias MyApp.Repo 
Repo.insert! %MyApp.Data{...} 
Repo.insert! %MyApp.Data{...} 

あなたは

mix run priv/repo/seeds.exs 

たり、生産に必要があるとして、それを実行することができます:

MIX_ENV=prod mix run priv/repo/seeds.exs 

私はあなたがするために何らかの理由を見ることができませんアプリが起動するたびにこれを行います。開発、テスト、またはプロダクションで実行するすべてのコマンドが、データベースにデータを作成するペナルティを支払う必要があるとします。それは良い考えではありません。

+0

あなたの提案は、プロジェクトのコードをlib(または他の.ex)ファイルに入れるのではなく、ミックスを使用して実行できるスクリプトを作成することです。私はライトを手に入れましたか? –

+0

OK、私はそれを得たと思う。私はMeteorから来て偏っていました。クライアントやサーバが起動したときにコードを実行するMeteor.startupという関数の中で実行していました...私に答える時間を探してくれてありがとう。 –

+2

あなたのための大きなUAU、クリスと残りのチーム。私は驚いています。なぜなら、ソリューションはすでにプロジェクトファイルの中に入っていたからです(私はこれまで見たことがありませんでした...)。ドキュメントは素晴らしく、新参者がそれをすべて理解できるようにする定義にリンクしています。深い感謝。 –