如何在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. 执行迁移操作
完成以上配置后,依次执行以下命令:
- 创建数据库(如果还未创建):
mix ecto.create
- 执行迁移:
mix ecto.migrate
- 最后启动iex:
iex -S mix
这时候就不会再出现Ecto.Schema未找到的错误了。
内容的提问来源于stack exchange,提问作者Dmitriy Makarenko
相关产品推荐
相关产品推荐

