Gro*_*ery 6 elixir ecto phoenix-framework arc-ecto
有趣的问题我得到了.我有一个使用arc-ecto处理文件上传的测试.在上传器模块中,我覆盖了storage_dir功能.在那里我做一个数据库调用来获取我正在上传的东西的父记录的id.在实践中很有效.
虽然测试很吓人.我猜这与文件保存是异步任务这一事实有关.因此,在保存文件之前完成测试.数据库连接已关闭,上传器错误消失.这是错误:
15:33:10.457 [error] Postgrex.Protocol (#PID<0.325.0>) disconnected: ** (DBConnection.ConnectionError) owner #PID<0.535.0> exited while client #PID<0.538.0> is still running with: shutdown
15:33:10.645 [error] Postgrex.Protocol (#PID<0.331.0>) disconnected: ** (DBConnection.ConnectionError) owner #PID<0.596.0> exited while client #PID<0.599.0> is still running with: shutdown
15:33:10.674 [error] Task #PID<0.599.0> started from #PID<0.598.0> terminating
** (DBConnection.ConnectionError) tcp recv: closed
(ecto) lib/ecto/adapters/postgres/connection.ex:115: Ecto.Adapters.Postgres.Connection.execute/4
(ecto) lib/ecto/adapters/sql.ex:243: Ecto.Adapters.SQL.sql_call/6
(ecto) lib/ecto/adapters/sql.ex:441: Ecto.Adapters.SQL.execute_or_reset/7
(ecto) lib/ecto/repo/queryable.ex:130: Ecto.Repo.Queryable.execute/5
(ecto) lib/ecto/repo/queryable.ex:35: Ecto.Repo.Queryable.all/4
(ecto) lib/ecto/repo/queryable.ex:68: Ecto.Repo.Queryable.one/4
(pedal_app) lib/pedal_app/web/uploaders/photo_uploader.ex:31: PedalApp.Web.PhotoUploader.storage_dir/2
lib/arc/storage/local.ex:33: Arc.Storage.Local.build_local_path/3
lib/arc/storage/local.ex:27: Arc.Storage.Local.delete/3
(elixir) lib/task/supervised.ex:85: Task.Supervised.do_apply/2
(elixir) lib/task/supervised.ex:36: Task.Supervised.reply/5
(stdlib) proc_lib.erl:247: :proc_lib.init_p_do_apply/3
Function: #Function<0.51838860/0 in Arc.Actions.Delete.async_delete_version/3>
Args: []
Run Code Online (Sandbox Code Playgroud)
这是常见的事吗?在完成所有工作之后,我怎能告诉我的测试不要保释?
编辑:我的解决方法是为所有内容做一个预加载,所以我不在上传器中进行数据库调用.但问题仍然存在.
小智 1
您可以禁用添加到上传定义中的异步处理@async false。
我确信您不想在开发/生产中禁用它,而只想在测试中禁用它。
我会尝试这个:
您config/test.exs可以添加:
config :project_name, arc_async: false
Run Code Online (Sandbox Code Playgroud)
在您的上传者定义中,您可以添加:
@async Application.get_env(:project_name, :arc_async, true)
Run Code Online (Sandbox Code Playgroud)
我没有测试它,所以不确定它是否有效,但至少可以尝试一下。
| 归档时间: |
|
| 查看次数: |
366 次 |
| 最近记录: |