Ошибка во время выполнения с rust-slack: индекс выходит за пределы: длина равна 0, но индекс равен 0

#curl #rust #runtime-error

#curl #Ржавчина #ошибка во время выполнения

Вопрос:

Я использую rust-slack и столкнулся с ошибкой во время выполнения, которую трудно понять такому новичку, как я:

 thread 'main' panicked at 'index out of bounds: the len is 0 but the index is 0', ../src/libcollections/vec.rs:1265
stack backtrace:
   1:     0x55c042e567e9 - std::sys::backtrace::tracing::imp::write::h00e948915d1e4c72
   2:     0x55c042e5d9fc - std::panicking::default_hook::_{{closure}}::h7b8a142818383fb8
   3:     0x55c042e5cc49 - std::panicking::default_hook::h41cf296f654245d7
   4:     0x55c042e5d338 - std::panicking::rust_panic_with_hook::h4cbd7ca63ce1aee9
   5:     0x55c042e5d192 - std::panicking::begin_panic::h93672d0313d5e8e9
   6:     0x55c042e5d100 - std::panicking::begin_panic_fmt::hd0daa02942245d81
   7:     0x55c042e5d081 - rust_begin_unwind
   8:     0x55c042e936df - core::panicking::panic_fmt::hbfc935564d134c1b
   9:     0x55c042e93683 - core::panicking::panic_bounds_check::h08d619adcd972898
  10:     0x55c042e1f3db - curl::easy::Easy::cvt::h8b0cee78a8555d56
  11:     0x55c042e1f1fd - curl::easy::Easy::setopt_path::h97000cc95ffaf29e
  12:     0x55c042e20e05 - curl::easy::default_configure::h81b9c3a40aadad76
  13:     0x55c042e1e715 - curl::easy::Easy::new::h6256decf6c19f143
  14:     0x55c042db16e4 - slack_hook::slack::Slack::send::h14b50e23bd1ee165
  15:     0x55c042dab5af - deployer::main::had2f8b13f079aa74
  16:     0x55c042e654e6 - __rust_maybe_catch_panic
  17:     0x55c042e5c3c2 - std::rt::lang_start::h53bf99b0829cc03c
  18:     0x7f176846682f - __libc_start_main
  19:     0x55c042da5e98 - _start
  20:                0x0 - <unknown>
 
  • Он компилируется и работает на macOS (без паники).
  • Он компилируется, но завершается с ошибкой (см. Ошибку Выше) на почти новой Ubuntu 16.04.

У меня есть некоторые println! следы в моем приложении, поэтому я знаю, где он выходит из строя, и 20-я строка обратной трассировки, похоже, говорит, что это тоже здесь. По иронии судьбы, функция вызывается success и является последним шагом длинного скрипта:

 fn success()  {
    let slack = Slack::new("https://hooks.slack.com/MY_HOOK_URL").unwrap();
    let p = PayloadBuilder::new()
        .text("Deployment success.")
        .channel("#app-notifier")
        .username("Deploy Bot")
        .icon_emoji(":tropical_drink:")
        .build()
        .unwrap();

    let res = slack.send(amp;p);
    match res {
        Ok(()) => println!("Success msg sent."),
        Err(x) => println!("<!> Success error ^^: {:?}",x)
    }
}
 

URL-адрес Slack работает на моем локальном компьютере. Как исправить этот конкретный случай самостоятельно? Мне просто нужны некоторые подсказки.

Комментарии:

1. Неясно, в чем здесь вопрос: название, похоже, подразумевает, что вы не понимаете, что использование индекса 0 в коллекции размера 0 вызовет панику … однако вопросы, похоже, в основном объясняют, ПОЧЕМУ здесь появляется этот индекс 0. Я бы предложил отредактировать заголовок, чтобы сделать его slack доступным, поскольку это суть вопроса.

2. @MatthieuM. Спасибо! Вы правы, я только что отредактировал его. Теперь лучше?

3. Отлично, теперь выглядит намного лучше 🙂 Хотя, конечно, теперь я понятия не имею, в чем проблема: x

4. По-видимому, эта проблема (или, по крайней мере, подпроблема) теперь исправлена: проблема на GitHub .

Ответ №1:

Это была проблема в curl-rust. Исправлена эта проблема. Мне просто нужно было запустить cargo update , затем перестроить, и теперь все в порядке.

Спасибо Лукасу Калбертодту, Алексу Крайтону и автору rust-slack за их помощь.