使用 Ecto 2.0.0-rc.0 并执行 ecto.migrate 时出现奇怪的错误
Posted
技术标签:
【中文标题】使用 Ecto 2.0.0-rc.0 并执行 ecto.migrate 时出现奇怪的错误【英文标题】:Strange error while using Ecto 2.0.0-rc.0 and executing ecto.migrate 【发布时间】:2016-08-09 10:00:50 【问题描述】:今天,和往常一样,我尝试在我的 Phoenix 应用程序中 mix ecto.migrate,却意外地发现了以下错误:
warning: could not find repositories for application :adah.
You can avoid this warning by passing the -r flag or by setting the
repositories managed by this application in your config files:
config :adah, ecto_repos: [...]
The configuration may be an empty list if it does not define any repo.
** (Protocol.UndefinedError) protocol Enumerable not implemented for :ok
(elixir) lib/enum.ex:1: Enumerable.impl_for!/1
(elixir) lib/enum.ex:116: Enumerable.reduce/3
(elixir) lib/enum.ex:1486: Enum.reduce/3
(elixir) lib/enum.ex:609: Enum.each/2
(mix) lib/mix/cli.ex:58: Mix.CLI.run_task/2
我的部门是:
phoenix_ecto: 3.0.0-rc.0
ecto: 2.0.0-rc.0
...
我的配置文件有以下几行:
dev.ex:
# Configure your database
config :adah, Adah.Repo,
adapter: Ecto.Adapters.Postgres,
username: "postgres",
password: "postgres",
database: "adah_dev",
hostname: "localhost",
pool_size: 10
test.ex:
# Configure your database
config :adah, Adah.Repo,
adapter: Ecto.Adapters.Postgres,
username: System.get_env("POSTGRES_USER") || "postgres",
password: System.get_env("POSTGRES_PASSWORD") || "postgres",
database: System.get_env("POSTGRES_DB") || "adah_test",
hostname: System.get_env("POSTGRES_HOST") || "localhost",
pool: Ecto.Adapters.SQL.Sandbox
而且我在开发环境中运行测试或提供页面时没有这样的错误,只有当我运行 mix ecto.migrate 时。
那么...我应该将什么添加到我的配置文件或传递给 -r 标志?
更新:我相信有一个错误,它对应于 phoenix-3.0.0-rc.0 或 ecto-2.0.0-rc.0 包,因为当我使用 :ecto, "== 2.0.0 -beta.2", :phoenix_ecto, "3.0.0-beta.2" 切换,一切正常。
【问题讨论】:
您是否尝试过按照错误提示执行的操作:即添加配置? @michalmuskala,我不太确定应该在配置文件中添加什么以及应该在哪个文件中添加它?到 config.exs 还是到 dev.exs?我的意思是,给定的行不是已经在声明回购了吗? 【参考方案1】:将此添加到 config/config.ex
config :adah, :ecto_repos, [Adah.Repo]
【讨论】:
谢谢,它有帮助,但你能解释一下为什么需要它吗? 你能包含完整版本的更正文件吗? OP 的 sn-p 已经有一行写着config :adah, Adah.Repo
等。以上是关于使用 Ecto 2.0.0-rc.0 并执行 ecto.migrate 时出现奇怪的错误的主要内容,如果未能解决你的问题,请参考以下文章
Ecto查询在datetime字段上执行group_by MONTH并返回元组列表