凤凰框架/ Elixir添加地理空间领域

时间:2017-02-23 02:07:50

标签: elixir geospatial phoenix-framework

我正在尝试使用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.defineEcto.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不可用。

我认为不应该这么难,并且怀疑我犯了一个明显的错误。任何熟悉在凤凰城设置地理位置的人都会非常感激。 谢谢。

1 个答案:

答案 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

我希望这可以帮到你!