You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Elixir中正确执行迁移文件?

解决Ecto迁移中Ecto.Schema未找到的问题

这个问题的核心是你新建的mix new project1项目默认没有集成Ecto框架,同时迁移文件的放置位置也不符合Ecto的规范,下面是一步步的正确操作流程:

1. 添加Ecto及数据库适配器依赖

首先需要在项目中引入Ecto相关依赖,打开mix.exs文件,找到deps函数,添加Ecto和对应的数据库适配器(这里以PostgreSQL为例,如果用MySQL可以换成myxql):

defp deps do
  [
    {:ecto_sql, "~> 3.0"},
    {:postgrex, ">= 0.0.0"}
  ]
end

保存后执行命令安装依赖:

mix deps.get

2. 配置数据库与Repo模块

配置数据库连接

打开config/config.exs,添加数据库连接配置,替换成你自己的数据库信息:

config :project1, Project1.Repo,
  username: "你的数据库用户名",
  password: "你的数据库密码",
  database: "project1_dev",
  hostname: "localhost",
  port: 5432, # PostgreSQL默认端口,MySQL请改为3306
  pool_size: 10

创建Repo模块

在lib/project1/目录下新建repo.ex文件,内容如下:

defmodule Project1.Repo do
  use Ecto.Repo,
    otp_app: :project1,
    adapter: Ecto.Adapters.Postgres # MySQL用户请改为Ecto.Adapters.MyXQL
end

将Repo加入项目监督树

打开lib/project1/application.ex,修改start函数,把Repo加入子进程列表:

def start(_type, _args) do
  children = [
    Project1.Repo
  ]

  Supervisor.start_link(children, strategy: :one_for_one)
end

3. 调整迁移文件位置

Ecto的迁移文件默认存储路径是priv/repo/migrations/,你需要创建这个目录(如果不存在),然后把你的20180423091126_create_reference_book.exs迁移文件从lib文件夹移到这个目录下。

4. 执行迁移操作

完成以上配置后,依次执行以下命令:

  1. 创建数据库(如果还未创建):
mix ecto.create
  1. 执行迁移:
mix ecto.migrate
  1. 最后启动iex:
iex -S mix

这时候就不会再出现Ecto.Schema未找到的错误了。

内容的提问来源于stack exchange,提问作者Dmitriy Makarenko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:09:59