【问题标题】:Error trying to implement "geo" postgrex extention type尝试实现“geo”postgres 扩展类型时出错
【发布时间】:2017-05-28 07:25:42
【问题描述】:

我正在关注this tutorial,它使用extensions 字段在config.exs 中添加了一个postgrex 扩展。然而,现在添加 postgrex 扩展的方法已被弃用,我们现在应该使用 type 字段而不是 extensions 字段。我正在按照geo library github page 上的代码添加扩展名:

config.exs

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

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

【问题讨论】:

  • 您是否下载并安装了 PostGIS?
  • @a_horse_with_no_name 啊,不。我刚刚在我的部门中安装了 Geo 作为一个部门:[{:geo, "~> 1.4"}]。我将下载 PostGis
  • 您使用的是哪个版本的 Ecto? (查看 mix.lock 中的确切版本)
  • @Dogbert ecto 版本 2.1.4

标签: postgresql ecto elixir postgrex


【解决方案1】:

定义自定义 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-06-15
    • 2011-07-23
    • 2015-10-22
    • 2021-09-30
    • 2020-09-12
    • 2013-09-12
    • 1970-01-01
    • 1970-01-01
    • 2017-12-22
    相关资源
    最近更新 更多