2

我正在关注本教程config.exs,该教程在withextensions字段中添加了一个 postgrex 扩展。然而,现在添加 postgrex 扩展的方式已被弃用,我们现在应该使用type字段而不是extensions字段。我正在关注geo library github page上的代码,以添加扩展名:

配置文件

Postgrex.Types.define(MyApp.PostgresTypes,
  [Geo.PostGIS.Extension] ++ Ecto.Adapters.Postgres.extensions(),
  json: Poison)

use Mix.Config

config :api, Api.Repo,
  types: MyApp.PostgresTypes,
  adapter: Ecto.Adapters.Postgres,
  database: "api_repo",
  username: "postgres",
  password: "postgres",
  hostname: "localhost",
  web_port: String.to_integer(System.get_env("PORT") || "4000"),
  timeout: 60_000,
  pool_timeout: 60_000

config :api, ecto_repos: [Api.Repo]

但我收到了这个错误:

bash-3.2$ mix ecto.migrate
** (Mix.Config.LoadError) could not load config config/config.exs
    ** (UndefinedFunctionError) function Ecto.Adapters.Postgres.extensions/0 is undefined (module Ecto.Adapt
ers.Postgres is not available)
    Ecto.Adapters.Postgres.extensions()
    (stdlib) erl_eval.erl:670: :erl_eval.do_apply/6
    (stdlib) erl_eval.erl:470: :erl_eval.expr/5
    (stdlib) erl_eval.erl:878: :erl_eval.expr_list/6
    (stdlib) erl_eval.erl:404: :erl_eval.expr/5
    (stdlib) erl_eval.erl:122: :erl_eval.exprs/5

我在网上看到这有时是由于postgrex 的一个版本,但这是一个非常旧的版本,我正在使用{:postgrex, "~> 0.13.2"},. 我错过了什么?

4

1 回答 1

7

定义自定义 Postgrex 类型的行需要放在.ex与您的应用程序一起编译的文件中(lib/和中的任何内容web/),而不是配置文件中。配置文件无权访问应用程序的依赖项功能。

因此,如果您将此代码移至例如lib/my_app/postgres_types.ex

Postgrex.Types.define(MyApp.PostgresTypes,
  [Geo.PostGIS.Extension] ++ Ecto.Adapters.Postgres.extensions(),
  json: Poison)

假设您已正确遵循包中的其余说明,您不应再收到未定义的函数错误,并且一切都应该正常工作geo

于 2017-05-28T08:23:08.867 回答