2017-01-28 4 views
1

Я пытаюсь построить веб-сервиса с использованием железа this source as a tutorial, но я получаю сообщение об ошибке при компиляции гипер:«макрос не определен» ошибка при компиляции гипер 0.9.17

Compiling hyper v0.9.17 
/root/.cargo/registry/src/github.com-88ac128001ac3a9a/hyper-0.9.17/src/header/common/accept_language.rs:62:23: 62:30 error: macro undefined: 'langtag!' 
/root/.cargo/registry/src/github.com-88ac128001ac3a9a/hyper-0.9.17/src/header/common/accept_language.rs:62     qitem(langtag!(en;;;US)), 
                                   ^~~~~~~ 
/root/.cargo/registry/src/github.com-88ac128001ac3a9a/hyper-0.9.17/src/header/common/accept_language.rs:63:34: 63:41 error: macro undefined: 'langtag!' 
/root/.cargo/registry/src/github.com-88ac128001ac3a9a/hyper-0.9.17/src/header/common/accept_language.rs:63     QualityItem::new(langtag!(en), Quality(500)), 
                                      ^~~~~~~ 
/root/.cargo/registry/src/github.com-88ac128001ac3a9a/hyper-0.9.17/src/header/common/accept_language.rs:64:23: 64:30 error: macro undefined: 'langtag!' 
/root/.cargo/registry/src/github.com-88ac128001ac3a9a/hyper-0.9.17/src/header/common/accept_language.rs:64     qitem(langtag!(fr)), 
                                   ^~~~~~~ 

Версии я в с помощью:

  • груза 0.8.0 (встроенный 2016-03-22)
  • rustc 1.7.0

Са rgo.toml

[package] 
name = "hello" 
version = "0.1.0" 
authors = ["root"] 

[dependencies] 
language-tags = "0.2.2" 
iron = "0.4.0" 

main.rs:

extern crate iron; 

use iron::prelude::*; 
use iron::status; 
use iron::mime::Mime; 

fn main() { 
    Iron::new(|_: &mut Request| { 
    let content_type = "application/json".parse::<Mime>().unwrap(); 

    Ok(Response::with((content_type, status::Ok, "{ respone: \"Hello world!\" }"))) 
}).http("localhost:3009").unwrap(); 
} 

Я только добавил языка-теги в Cargo.toml, потому что я думал, что это будет решить мою проблему. Дополнительные изменения не были сделаны.

+1

Почему вы решили использовать Rust 1.7? Сейчас около 11 месяцев. – Shepmaster

+0

спасибо @Shepmaster. Это была проблема с версией. – dnlkng

ответ

1

Старая версия Rust вызывала проблему. Сегодняшняя стабильная версия Rust - это 1.14.0, но на моей Digital Ocean VM предустановлена ​​Rust 1.7. Даже после запуска официальной установки, версия была еще 1,7:

curl https://sh.rustup.rs -sSf | sh 

После установки он говорит:

Добро пожаловать в Руст!

Это будет скачать и установить официальный компилятор для языка программирования Rust и его менеджера пакетов Cargo.

Это добавит груз, rustc, rustup и другие команды в каталог грузовладельца бин , расположенной по адресу:

/root/.cargo/bin 

Этот путь будет добавлен в переменную окружения PATH путем изменения файла профиля, расположенного по адресу:

/root/.profile 

Я использую ЗШ, которая не использует ~/.profile. Поэтому переменная окружения PATH не изменилась для меня, и поэтому команда cargo run указала на предустановленную старую версию в /usr/bin/cargo, а не на ~/.cargo/bin.

Вы можете узнать, где находятся файлы с кодом which cargo или which rustc.

Решение было использовать ~/.cargo/bin/cargo run. Для Zsh, вы можете также добавить папку ~/.cargo/bin в переменную PATH среды путем добавления

export PATH="~/.cargo/bin:$PATH" 

к вашему .zshrc

+1

Я уверен, что если вы читали инсталляционный текст, [вы бы видели] (https://github.com/rust-lang-nursery/rustup.rs/blob/dcacbf6ed229ce96a86894011c11f28838df0979/src/rustup-cli/self_update.rs # L115-L119): * При следующем входе в систему это будет выполнено автоматически . ** Для настройки текущей оболочки ** запустите 'source {cargo_home}/env' *. – Shepmaster

Смежные вопросы