elixir - 在 Elixir 生产部署期间数据库种子未运行
问题描述
灵药版本:1.4
凤凰版:1.3.4
我有一个 release_task.ex 文件定义为
defmodule Campaigns.ReleaseTasks do
@start_apps [
:mix,
:crypto,
:ssl,
:postgrex,
:ecto_sql,
:ecto
]
@repos Application.get_env(:campaigns, :ecto_repos, [])
def migrate(_argv) do
start_services()
run_migrations()
stop_services()
end
def seed(_argv) do
start_services()
run_migrations()
run_seeds()
stop_services()
end
defp start_services do
IO.puts("Starting dependencies...")
# Start apps necessary for executing migrations
Enum.each(@start_apps, &Application.ensure_all_started/1)
# Start the Repo(s) for app
IO.puts("Starting repos...")
Enum.each(@repos, & &1.start_link(pool_size: 2))
end
defp stop_services do
IO.puts("Success!")
:init.stop()
end
defp run_migrations do
Enum.each(@repos, &run_migrations_for/1)
end
defp run_migrations_for(repo) do
app = Keyword.get(repo.config, :otp_app)
IO.puts("Running migrations for #{app}")
migrations_path = priv_path_for(repo, "migrations")
Ecto.Migrator.run(repo, migrations_path, :up, all: true, prefix: :campaigns)
end
defp run_seeds do
run_seeds_for(Enum.at(@repos, 0))
end
defp run_seeds_for(repo) do
# Run the seed script if it exists
seed_script = priv_path_for(repo, "seeds.exs")
if File.exists?(seed_script) do
IO.puts("Running seed script..")
#
# CODE FAILS AT THIS STEP
#
Code.eval_file(seed_script)
end
end
defp priv_path_for(repo, filename) do
app = Keyword.get(repo.config, :otp_app)
repo_underscore =
repo
|> Module.split()
|> List.last()
|> Macro.underscore()
priv_dir = "#{:code.priv_dir(app)}"
Path.join([priv_dir, repo_underscore, filename])
end
end
当我触发我的种子功能/opt/app/bin/campaigns seed
时,我docker-migrations.sh
收到一个错误,例如
▸ Evaluation failed with: could not lookup Ecto repo Campaigns.Repo.ReadOnly1 because it was not started or it does not exist
▸ (ecto) lib/ecto/repo/registry.ex:19: Ecto.Repo.Registry.lookup/1
▸ (ecto) lib/ecto/repo/queryable.ex:173: Ecto.Repo.Queryable.execute/4
▸ (ecto) lib/ecto/repo/queryable.ex:17: Ecto.Repo.Queryable.all/3
▸ (ecto) lib/ecto/repo/queryable.ex:112: Ecto.Repo.Queryable.one/3
▸ (campaigns) lib/campaigns/models/category.ex:20: Campaigns.Models.Category.upsert/2
▸ (elixir) lib/enum.ex:769: Enum."-each/2-lists^foreach/1-0-"/2
▸ (elixir) lib/enum.ex:769: Enum.each/2
▸ (stdlib) erl_eval.erl:680: :erl_eval.do_apply/6
此时触发异常Code.eval_file(seed_script)
知道这里出了什么问题。
解决方案
推荐阅读
- excel - COUNTIF 公式计算不匹配的值
- python - Python:未知类型提示不会引发 __future__ 导入异常
- python - Unndent 不匹配任何外部缩进级别
- matplotlib - matplotlib:如何自动缩放字体大小以使文本适合某些边界框
- kubernetes - 如何使用 Kubernetes API 获取特定 Kubernetes 集群中所有命名空间的列表?
- wolkenkit - 如何使用/消费来自 wolkenkit-eventstore 的事件流
- php - Laravel 5.8 更新 mysql json 列转换为数组更改数据存储格式
- javascript - 错误类型错误:无法读取未定义的属性“有效”
- linux - 使用 sed 命令将行替换为正则表达式
- java - java - 如何在java swing中创建3个按钮以占据它们添加到的面板的1/3?