尝试实施 "geo" postgrex 扩展类型时出错
Error trying to implement "geo" postgrex extention type
我正在关注 this tutorial which adds a postgrex extension into the config.exs
with the extensions
field. However that is now a deprecated way to add a postgrex extension, we should now use the type
field instead of the extensions
field. I'm following the code on the 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"},
。我错过了什么?
定义自定义 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
程序包中的其余说明,一切都应该正常。
我正在关注 this tutorial which adds a postgrex extension into the config.exs
with the extensions
field. However that is now a deprecated way to add a postgrex extension, we should now use the type
field instead of the extensions
field. I'm following the code on the 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"},
。我错过了什么?
定义自定义 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
程序包中的其余说明,一切都应该正常。