Phoenix in Action(最终版):Jason错误

时间:2019-05-07 18:32:23

标签: phoenix-framework

我遇到与此github issue相同的问题。

在第110,Phoenix in Action 1.4的最终版本是

  

在启动服务器之前,您还需要做一件事。   Phoenix要求您让它知道您要使用哪个库   处理JSON格式的数据时。 Phoenix的默认库   用途称为Jason,这也是您要使用的用途。前几名   伞应用程序级别,您需要配置Phoenix   依赖使用Jason。在auction_umbrella/config/config.exs中,添加   以下清单的最后一行:

use Mix.Config
import_config "../apps/*/config/config.exs"
config :phoenix, :json_library, Jason

我这样做了,但是当我进入apps/auction_web目录时,尝试启动服务器:

$ iex -S mix phx.server

我得到了错误:

Erlang/OTP 20 [erts-9.3] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:10] [hipe] [kernel-poll:false]

warning: failed to load Jason for Phoenix JSON encoding
(module Jason is not available).

Ensure Jason exists in your deps in mix.exs,
and you have configured Phoenix to use it for JSON encoding by
verifying the following exists in your config/config.exs:

    config :phoenix, :json_library, Jason


  (phoenix) lib/phoenix.ex:40: Phoenix.start/2
  (kernel) application_master.erl:273: :application_master.start_it_old/4

Compiling 11 files (.ex)

== Compilation error in file lib/auction_web/endpoint.ex ==
** (ArgumentError) invalid :json_decoder option. The module Poison is not loaded and could not be found
    (plug) lib/plug/parsers/json.ex:54: Plug.Parsers.JSON.validate_decoder!/1
    (plug) lib/plug/parsers/json.ex:32: Plug.Parsers.JSON.init/1
    (plug) lib/plug/parsers.ex:245: anonymous fn/3 in Plug.Parsers.convert_parsers/2
    (elixir) lib/enum.ex:1899: Enum."-reduce/3-lists^foldl/2-0-"/3
    (plug) lib/plug/parsers.ex:228: Plug.Parsers.convert_parsers/2
    (plug) lib/plug/parsers.ex:224: Plug.Parsers.init/1
    (plug) lib/plug/builder.ex:302: Plug.Builder.init_module_plug/4
    (plug) lib/plug/builder.ex:286: anonymous fn/5 in Plug.Builder.compile/3
~/phoenix_apps/auction_umbrella/apps/auction_web$ 

其他信息:

$ mix phx.new --version
Phoenix v1.4.0

然后我尝试将jason依赖项添加到伞应用程序的mix.exs文件和auction_web应用程序的mix.exs文件中,然后在包含以下内容的两个目录中都添加了mix deps.get mix.exs文件,尝试启动服务器时仍然出现相同的错误。

2 个答案:

答案 0 :(得分:0)

啊!我在配置文件中输入了phoneix(应为phoenix)。

然后,我从两个mix.exs文件中删除了:jason依赖项,然后执行了mix deps.get(重写锁定文件),然后执行了mix deps.clean jason,并尝试启动服务器时,遇到相同的错误。

那么,我应该在哪个mix.exs文件中添加:jason依赖项?我将:jason依赖项添加到Auction_web mix.exs文件中,然后执行mix deps.get,然后服务器启动。

答案 1 :(得分:0)

我认为您的后续回答表明您已解决问题,但是您将依赖项配置添加到auction_umbrella/config/config.exs

  

我将:jason依赖项添加到auction_web mix.exs文件中,然后混合deps.get,然后服务器启动。

这是否意味着现在一切都在为您工作?