在Circle CI上运行我的测试以获得干净生成的Phoenix项目时,我得到:
$ mix test
==> connection
Compiling 1 file (.ex)
Generated connection app
==> gettext
Compiling 1 file (.erl)
Compiling 20 files (.ex)
Generated gettext app
===> Compiling ranch
==> poolboy (compile)
==> decimal
Compiling 1 file (.ex)
Generated decimal app
==> poison
Compiling 4 files (.ex)
warning: HashDict.size/1 is deprecated, use maps and the Map module instead
lib/poison/encoder.ex:283
Generated poison app
==> db_connection
Compiling 23 files (.ex)
warning: module attribute @regulator was set but never used
lib/db_connection/sojourn.ex:39
Generated db_connection app
==> phoenix_pubsub
Compiling 12 files (.ex)
Generated phoenix_pubsub app
===> Compiling cowlib
===> Compiling cowboy
==> mime
Compiling 1 file (.ex)
Generated mime app
==> plug
Compiling 44 files (.ex)
Generated plug app
==> phoenix_html
Compiling 8 files (.ex)
Generated phoenix_html app
==> phoenix
Compiling 60 files (.ex)
Generated phoenix app
==> postgrex
Compiling 61 files (.ex)
Generated postgrex app
==> ecto
Compiling 69 files (.ex)
Compiling lib/ecto/query/builder/lock.ex (it's taking more than 10s)
Compiling lib/ecto/repo/queryable.ex (it's taking more than 10s)
Compiling lib/ecto/query/builder/filter.ex (it's taking more than 10s)
Compiling lib/ecto/repo/preloader.ex (it's taking more than 10s)
Compiling lib/ecto/migration/runner.ex (it's taking more than 10s)
Compiling lib/ecto/repo/schema.ex (it's taking more than 10s)
Compiling lib/ecto/migration/schema_migration.ex (it's taking more than 10s)
Compiling lib/ecto/adapters/postgres/connection.ex (it's taking more than 10s)
Compiling lib/ecto/changeset.ex (it's taking more than 10s)
Generated ecto app
==> phoenix_ecto
Compiling 4 files (.ex)
Generated phoenix_ecto app
==> martinffx
Compiling 15 files (.ex)
Generated martinffx app
** (Mix) Could not find migrations directory "priv/repo/migrations"
for repo Martinffx.Repo.
This may be because you are in a new project and the
migration directory has not been created yet. Creating an
empty directory at the path above will fix this error.
If you expected existing migrations to be found, please
make sure your repository has been properly configured
and the configured path exists.
但在本地运行相同的命令时,它会成功运行:
$ mix test
....
Finished in 0.1 seconds
4 tests, 0 failures
Randomized with seed 328700
为什么呢?我没有迁移吗?它在本地工作......发生了什么?
circle.yml
machine:
environment:
PATH: "$HOME/.asdf/bin:$HOME/.asdf/shims:$PATH"
dependencies:
cache_directories:
- ~/.asdf
- deps
- _build
pre:
- chmod +x ./circle_pre_build.sh
- ./circle_pre_build.sh
database:
override:
- psql -U ubuntu < ./db/init-test.sql
test:
override:
- elixir -v
- mix deps
- node -v
- npm -v
- mix test
circle_pre_build.sh
#!/bin/bash
# http://code.parent.co/phoenix-circleci-heroku/
# Ensure exit codes other than 0 fail the build
set -e
# Check for asdf
if [ ! asdf | grep version ]
then
git clone https://github.com/HashNuke/asdf.git ~/.asdf;
# Add plugins for asdf
asdf plugin-add erlang https://github.com/HashNuke/asdf-erlang.git
asdf plugin-add elixir https://github.com/HashNuke/asdf-elixir.git
fi
# Install erlang/elixir
erlang_version=$(awk '/erlang/ { print $2 }' .tool-versions)
asdf install erlang $erlang_version
elixir_version=$(awk '/elixir/ { print $2 }' .tool-versions)
asdf install elixir $elixir_version
# Get dependencies
yes | mix deps.get
yes | mix deps.compile
# Exit successfully
exit 0
INIT-TEST.SQL
DROP DATABASE martinffx_test;
DO $$
BEGIN
IF NOT EXISTS (
SELECT *
FROM pg_catalog.pg_user
WHERE usename = 'martinffx') THEN
CREATE ROLE martinffx LOGIN PASSWORD 'password';
ALTER USER martinffx CREATEDB;
END IF;
END
$$;
软件版本
$ elixir -v
Erlang/OTP 19 [erts-8.2] [source] [64-bit] [smp:32:2] [async-threads:10] [hipe] [kernel-poll:false]
Elixir 1.4.0
$ mix deps
* connection 1.0.4 (Hex package) (mix)
locked at 1.0.4 (connection) a1cae722
ok
* fs 0.9.1 (Hex package) (rebar)
locked at 0.9.2 (fs) ed17036c
ok
* gettext 0.13.1 (Hex package) (mix)
locked at 0.13.1 (gettext) 5e0daf4e
ok
* ranch 1.3.2 (Hex package) (rebar3)
locked at 1.3.2 (ranch) e4965a14
ok
* poolboy 1.5.1 (Hex package) (rebar)
locked at 1.5.1 (poolboy) 6b461639
ok
* decimal 1.3.1 (Hex package) (mix)
locked at 1.3.1 (decimal) 157b3ced
ok
* poison 2.2.0 (Hex package) (mix)
locked at 2.2.0 (poison) 4763b69a
ok
* db_connection 1.1.0 (Hex package) (mix)
locked at 1.1.0 (db_connection) b2b88db6
ok
* phoenix_pubsub 1.0.1 (Hex package) (mix)
locked at 1.0.1 (phoenix_pubsub) c10ddf62
ok
* cowlib 1.0.2 (Hex package) (rebar3)
locked at 1.0.2 (cowlib) 9d769a1d
ok
* cowboy 1.1.2 (Hex package) (rebar3)
locked at 1.1.2 (cowboy) 61ac29ea
ok
* mime 1.0.1 (Hex package) (mix)
locked at 1.0.1 (mime) 05c39385
ok
* plug 1.3.0 (Hex package) (mix)
locked at 1.3.0 (plug) 6e2b01af
ok
* phoenix_html 2.9.3 (Hex package) (mix)
locked at 2.9.3 (phoenix_html) 1b5a2122
ok
* phoenix 1.2.1 (Hex package) (mix)
locked at 1.2.1 (phoenix) 6dc59224
ok
* phoenix_live_reload 1.0.8 (Hex package) (mix)
locked at 1.0.8 (phoenix_live_reload) 4333f9c7
ok
* postgrex 0.13.0 (Hex package) (mix)
locked at 0.13.0 (postgrex) e101ab47
ok
* ecto 2.1.3 (Hex package) (mix)
locked at 2.1.3 (ecto) ffb24e15
ok
* phoenix_ecto 3.2.1 (Hex package) (mix)
locked at 3.2.1 (phoenix_ecto) 6cf11d59
ok
$ node -v
v4.2.6
$ npm -v
2.14.12
答案 0 :(得分:2)
git不存储不包含任何文件本身或任何子目录的目录。由于您的迁移目录没有任何迁移,即使您将整个应用程序添加并提交到git中,当您将git repo克隆到另一个目录时,您也会发现priv/repo/migrations
目录不存在。 Ecto要求存在此目录,这就是您收到错误的原因。
为了让git创建priv/repo/migrations
,您可以在priv/repo/migrations
内创建并提交一个虚拟文件。您还可以将以下行添加到预构建shell文件(mix compile
之前)以创建该目录(如果它不存在):
mkdir -p priv/repo/migrations