Не удается скомпилировать приложение Rust, поскольку переменная среды CARGO_MANIFEST_DIR отсутствует - PullRequest
0 голосов
/ 29 марта 2019

Недавно я добавил зависимость в мое приложение Rust, которое содержит процедурный макрос.Этот процедурный макрос вызывается с i18n_codegen::i18n!("locales");.Он найдет все файлы в каталоге locales относительно CARGO_MANIFEST_DIR.Насколько я понимаю, CARGO_MANIFEST_DIR является корнем вашего ящика и устанавливается в Cargo.

Это прекрасно работает локально, но когда я пытаюсь собрать его на своем CI-сервере, происходит сбой с таким сообщением:

root@9eb2477f8a48:~# cd ./project/
root@9eb2477f8a48:~/project# cargo build --tests
   Compiling i18n v0.1.0 (/root/project/i18n)
   Compiling diesel-factories v0.0.1
   Compiling rocket_contrib v0.4.0
error: Could not compile `i18n`.

Caused by:
  process didn't exit successfully: `rustc --edition=2018 --crate-name i18n i18n/src/lib.rs --color always --crate-type lib --emit=dep-info,link -C debuginfo=2 -C metadata=7a0984ff3e085e3a -C extra-filename=-7a0984ff3e085e3a --out-dir /root/project/target/debug/deps -C incremental=/root/project/target/debug/incremental -L dependency=/root/project/target/debug/deps --extern i18n_codegen=/root/project/target/debug/deps/libi18n_codegen-85460420d23be67d.so` (signal: 9, SIGKILL: kill)
warning: build failed, waiting for other jobs to finish...
error: Could not compile `i18n`.

Выполнение команды rustc дает

root@9eb2477f8a48:~/project# rustc --edition=2018 --crate-name i18n i18n/src/lib.rs --color always --crate-type lib --emit=dep-info,link -C debuginfo=2 -C metadata=7a0984ff3e085e3a -C extra-filename=-7a0984ff3e085e3a --out-dir /root/project/target/debug/deps -C incremental=/root/project/target/debug/incremental -L dependency=/root/project/target/debug/deps --extern i18n_codegen=/root/project/target/debug/deps/libi18n_codegen-85460420d23be67d.so
error: proc macro panicked
 --> i18n/src/lib.rs:1:1
  |
1 | i18n_codegen::i18n!("locales");
  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  |
  = help: message: Env var `CARGO_MANIFEST_DIR` was missing

error: aborting due to previous error

Кажется, что CARGO_MANIFEST_DIR отсутствует ... Как это может быть?Я думал, что всегда был установлен Cargo?Я предполагаю, что он может отсутствовать при запуске rustc напрямую, но как это может отсутствовать и при запуске cargo build --tests?

Код, который находит env var здесь https://github.com/davidpdrsn/i18n_codegen/blob/master/src/lib.rs#L233.

Основное приложение само по себе - рабочее пространство Cargo с несколькими другими ящиками внутри, не уверен, что это имеет значение.

Я использую ту же версию Rust по ночам локально и на CI.

Itэто рабочий проект с закрытым исходным кодом, поэтому, к сожалению, я не могу с легкостью поделиться им.

1 Ответ

2 голосов
/ 29 марта 2019

Первая и вторая ошибка не связаны:

  1. Сбой, потому что процесс был убит из "где-то" (комментарии, кажется, решили это).
  2. Сбой, потому что CARGO_MANIFEST_DIR установлен cargo, поэтому, если вы запускаете rustc вручную, вы должны установить переменную самостоятельно, обычно старайтесь вообще не запускать rustc вручную.
...