2016-12-11 10 views
0

私はapiでjsonを取得し、MongoDbに挿入するタスクを作っています。私はフェニックスとMongodb_Ectoを使用しています。Phoenix Repo.insert from controller

私は、モデルグループを持っており、コントローラでこのコードは魔法のように動作します:

HTTPoison.start 
group = %Group{ param1: "value", param2: "value" } |> Repo.insert! 

しかし、タスクで私はレポdefmoduleを持っていません。私はこれをしようとしました:

HTTPoison.start 
group = %Group{ param1: "value", param2: "value"} |> MyApp.Repo.insert! 

RepoだけではなくMyApp.Repoを使用してください。

私はこのエラーを受けています:

** (exit) exited in: :gen_server.call(MyApp.Repo.Pool, {:checkout, #Reference<0.0.1.11>, true}, 5000) 
** (EXIT) no process 
     :erlang.send(MyApp.Repo.Pool, {:"$gen_cast", {:cancel_waiting, #Reference<0.0.1.11>}}, [:noconnect]) 
(stdlib) gen_server.erl:416: :gen_server.do_send/2 
(stdlib) gen_server.erl:232: :gen_server.do_cast/2 
     src/poolboy.erl:58: :poolboy.checkout/3 
(stdlib) timer.erl:197: :timer.tc/3 
     lib/mongo/pool/poolboy.ex:33: Mongo.Pool.Poolboy.run/2 
     lib/mongo/pool.ex:142: Mongo.Pool.run_with_log/5 
     lib/mongo.ex:220: Mongo.insert_one/4 
     lib/mongo_ecto/connection.ex:124: Mongo.Ecto.Connection.catch_constraint_errors/1 
     lib/mongo_ecto.ex:522: Mongo.Ecto.insert/6 
     lib/ecto/repo/model.ex:253: Ecto.Repo.Model.apply/4 
     lib/ecto/repo/model.ex:83: anonymous fn/10 in Ecto.Repo.Model.do_insert/4 
     lib/ecto/repo/model.ex:14: Ecto.Repo.Model.insert!/4 

私はMongoDBの中で私のデータを保存するための正しい方法でRepo.insertにアクセスするにはどうすればよいですか?

ありがとうございます。

+1

上記の 'HTTPoison.start'を追加してください:':application.ensure_all_started(:my_app) '(':my_app'ではなくOTPアプリの名前を入れてください)。 – Dogbert

+0

この男に感謝します!魅力的な作品= D –

答えて

0

アプリケーション(したがってデータベースプール)は、ミックスタスクで自動的に開始されません。次を追加することにより、手動で起動することができます

:application.ensure_all_started(:my_app) 

:httpoisonがあなたのMixfileの:applicationsに記載されている場合:httpoison:my_app前に開始されていることを確認します、あなたは上の行としてもうHTTPoison.startを行う必要はありません。