我正在尝试使用https://github.com/bryanjos/geo包将地理空间字段添加到phoenix框架中。我想通过Ecto模型访问,所以我按照添加行的概述:
Postgrex.Types.define(
MyApp.PostgresTypes,
[Geo.PostGIS.Extension] ++
Ecto.Adapters.Postgres.extensions(),
json: Poison)
如自述文件中所述。问题是它没有准确指定添加它的位置,因此我将其添加到config / dev.exs
然后我添加了一行:
types: MyApp.PostgresTypes
指定我的dev repo配置文件config/dev.exs
。
然后我得到Postgrex.Types.define
和Ecto.Adapters.Postgres.extensions
函数不存在的错误(因为据报道模块不可用。
然后我尝试将以下行放在lib/myapp/myapp.ex
中,因为我怀疑它与进程初始化有关。
Postgrex.Types.define(
MyApp.PostgresTypes,
[Geo.PostGIS.Extension] ++
Ecto.Adapters.Postgres.extensions(),
json: Poison)
但是,当我添加更多字段时,请使用mix ecto.migrate进行另一个字段迁移, 我收到一个错误:
函数
Jobflo.PostgresTypes.find/2
未定义(模块Jobflo.PostgresTypes
不可用。
我认为不应该这么难,并且怀疑我犯了一个明显的错误。任何熟悉在凤凰城设置地理位置的人都会非常感激。 谢谢。
答案 0 :(得分:4)
几个月前,当我升级geo时,我发现这有点令人困惑。
创建一个名为lib/postgres_types.ex
的文件,其中包含以下内容:
Postgrex.Types.define(
Myapp.PostgresTypes,
[Geo.PostGIS.Extension] ++ Ecto.Adapters.Postgres.extensions(),
json: Poison
)
在您的配置文件中(在我的情况下,"#{Mix.env}.exs"
)确保您的配置如下所示:
config :myapp, Myapp.Repo,
adapter: Ecto.Adapters.Postgres,
types: Myapp.PostgresTypes,
username: "jbloggs",
password: "abc123",
database: "api",
hostname: "db_hostname.com",
pool_size: 10
我希望这可以帮到你!