介绍中的 Actix Web 示例给出了 运行 时间错误线程 'main' 在 'called `Option::unwrap()` on a `None` value' 时恐慌

Actix web example from introduction gives run-time error thread 'main' panicked at 'called `Option::unwrap()` on a `None` value'

我开始使用 actix-web 使用来自 actix web 指南入门部分的示例。当 运行 代码出现似乎来自 actix 框架的运行时错误。

版本:

这是代码:

extern crate actix_web;
use std::env;
use actix_web::{server, App, HttpRequest};

fn index(_req: &HttpRequest) -> &'static str {
    "Hello World!"
}

fn main() {
    env::set_var("RUST_BACKTRACE","1");

    server::new(
        || App::new()
            .resource("/", |r| r.f(index)))
        .bind("127.0.0.1:8088")
        .unwrap()
        .run();
}

它编译正常,但我得到以下回溯,回溯中的相关行似乎是第 11 行,其中似乎发生了恐慌,而第 73 行显示了我的主函数中最终导致恐慌的调用.

我仔细检查了端口 8088 是否可用。我做错了什么?

   Compiling hello_cargo v0.1.0 (D:\users\Jan Debeuckelaer\projects\hello_cargo)
    Finished dev [unoptimized + debuginfo] target(s) in 7.97s
     Running `target\debug\hello_cargo.exe`
thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', src\libcore\option.rs:345:21
stack backtrace:
   0: std::sys::windows::backtrace::set_frames
             at /rustc/2aa4c46cfdd726e97360c2734835aa3515e8c858\/src\libstd\sys\windows\backtrace\mod.rs:94
   1: std::sys::windows::backtrace::unwind_backtrace
             at /rustc/2aa4c46cfdd726e97360c2734835aa3515e8c858\/src\libstd\sys\windows\backtrace\mod.rs:81
   2: std::sys_common::backtrace::_print
             at /rustc/2aa4c46cfdd726e97360c2734835aa3515e8c858\/src\libstd\sys_common\backtrace.rs:70
   3: std::sys_common::backtrace::print
             at /rustc/2aa4c46cfdd726e97360c2734835aa3515e8c858\/src\libstd\sys_common\backtrace.rs:58
   4: std::panicking::default_hook::{{closure}}
             at /rustc/2aa4c46cfdd726e97360c2734835aa3515e8c858\/src\libstd\panicking.rs:200
   5: std::panicking::default_hook
             at /rustc/2aa4c46cfdd726e97360c2734835aa3515e8c858\/src\libstd\panicking.rs:215
   6: std::panicking::rust_panic_with_hook
             at /rustc/2aa4c46cfdd726e97360c2734835aa3515e8c858\/src\libstd\panicking.rs:478
   7: std::panicking::continue_panic_fmt
             at /rustc/2aa4c46cfdd726e97360c2734835aa3515e8c858\/src\libstd\panicking.rs:385
   8: std::panicking::rust_begin_panic
             at /rustc/2aa4c46cfdd726e97360c2734835aa3515e8c858\/src\libstd\panicking.rs:312
   9: core::panicking::panic_fmt
             at /rustc/2aa4c46cfdd726e97360c2734835aa3515e8c858\/src\libcore\panicking.rs:85
  10: core::panicking::panic
             at /rustc/2aa4c46cfdd726e97360c2734835aa3515e8c858\/src\libcore\panicking.rs:49
  11: core::option::Option<(mio::poll::Registration, mio::poll::SetReadiness)*>::unwrap<(mio::poll::Registration, mio::poll::SetReadiness)*>
             at /rustc/2aa4c46cfdd726e97360c2734835aa3515e8c858\src\libcore\macros.rs:10
  12: tokio_signal::windows::global_init
             at C:\Users\Jan Debeuckelaer\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-signal-0.2.8\src\windows.rs:165
  13: tokio_signal::windows::{{impl}}::new::{{closure}}
             at C:\Users\Jan Debeuckelaer\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-signal-0.2.8\src\windows.rs:118
  14: std::sync::once::{{impl}}::call_once::{{closure}}<closure>
             at /rustc/2aa4c46cfdd726e97360c2734835aa3515e8c858\src\libstd\sync\once.rs:220
  15: std::sync::once::Once::call_inner
             at /rustc/2aa4c46cfdd726e97360c2734835aa3515e8c858\/src\libstd\sync\once.rs:387
  16: std::sync::once::Once::call_once<closure>
             at /rustc/2aa4c46cfdd726e97360c2734835aa3515e8c858\src\libstd\sync\once.rs:220
  17: tokio_signal::windows::Event::new
             at C:\Users\Jan Debeuckelaer\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-signal-0.2.8\src\windows.rs:117
  18: tokio_signal::windows::Event::ctrl_c_handle
             at C:\Users\Jan Debeuckelaer\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-signal-0.2.8\src\windows.rs:96
  19: tokio_signal::ctrl_c_handle::ctrl_c_imp::{{closure}}
             at C:\Users\Jan Debeuckelaer\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-signal-0.2.8\src\lib.rs:137
  20: futures::future::lazy::Lazy<closure, futures::future::map::Map<alloc::boxed::Box<Future>, closure>>::get<closure,futures::future::map::Map<alloc::boxed::Box<Future>, closure>>
             at C:\Users\Jan Debeuckelaer\.cargo\registry\src\github.com-1ecc6299db9ec823\futures-0.1.25\src\future\lazy.rs:64
  21: futures::future::lazy::{{impl}}::poll<closure,futures::future::map::Map<alloc::boxed::Box<Future>, closure>>
             at C:\Users\Jan Debeuckelaer\.cargo\registry\src\github.com-1ecc6299db9ec823\futures-0.1.25\src\future\lazy.rs:82
  22: futures::future::{{impl}}::poll<Future>
             at C:\Users\Jan Debeuckelaer\.cargo\registry\src\github.com-1ecc6299db9ec823\futures-0.1.25\src\future\mod.rs:113
  23: futures::future::map_err::{{impl}}::poll<(),alloc::boxed::Box<Future>,closure>
             at C:\Users\Jan Debeuckelaer\.cargo\registry\src\github.com-1ecc6299db9ec823\futures-0.1.25\src\future\map_err.rs:30
  24: actix::fut::{{impl}}::poll<futures::future::map_err::MapErr<alloc::boxed::Box<Future>, closure>,actix::actors::signal::ProcessSignals>
             at C:\Users\Jan Debeuckelaer\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-0.7.9\src\fut\mod.rs:389
  25: actix::fut::map::{{impl}}::poll<(),actix::fut::FutureWrap<futures::future::map_err::MapErr<alloc::boxed::Box<Future>, closure>, actix::actors::signal::ProcessSignals>,closure>
             at C:\Users\Jan Debeuckelaer\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-0.7.9\src\fut\map.rs:38
  26: actix::fut::{{impl}}::poll<ActorFuture>
             at C:\Users\Jan Debeuckelaer\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-0.7.9\src\fut\mod.rs:313
  27: actix::contextimpl::{{impl}}::poll<actix::actors::signal::ProcessSignals,actix::context::Context<actix::actors::signal::ProcessSignals>>
             at C:\Users\Jan Debeuckelaer\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-0.7.9\src\contextimpl.rs:355
  28: actix::supervisor::{{impl}}::poll<actix::actors::signal::ProcessSignals>
             at C:\Users\Jan Debeuckelaer\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-0.7.9\src\supervisor.rs:147
  29: futures::future::{{impl}}::poll<actix::supervisor::Supervisor<actix::actors::signal::ProcessSignals>>
             at C:\Users\Jan Debeuckelaer\.cargo\registry\src\github.com-1ecc6299db9ec823\futures-0.1.25\src\future\mod.rs:113
  30: futures::future::{{impl}}::poll<Future>
             at C:\Users\Jan Debeuckelaer\.cargo\registry\src\github.com-1ecc6299db9ec823\futures-0.1.25\src\future\mod.rs:113
  31: futures::task_impl::{{impl}}::poll_future_notify::{{closure}}<alloc::boxed::Box<Future>,tokio_current_thread::scheduler::Notify<tokio_reactor::Handle>>
             at C:\Users\Jan Debeuckelaer\.cargo\registry\src\github.com-1ecc6299db9ec823\futures-0.1.25\src\task_impl\mod.rs:326
  32: futures::task_impl::{{impl}}::enter::{{closure}}<alloc::boxed::Box<Future>,closure,core::result::Result<futures::poll::Async<()>, ()>>
             at C:\Users\Jan Debeuckelaer\.cargo\registry\src\github.com-1ecc6299db9ec823\futures-0.1.25\src\task_impl\mod.rs:396
  33: futures::task_impl::std::set<closure,core::result::Result<futures::poll::Async<()>, ()>>
             at C:\Users\Jan Debeuckelaer\.cargo\registry\src\github.com-1ecc6299db9ec823\futures-0.1.25\src\task_impl\std\mod.rs:78
  34: futures::task_impl::Spawn<alloc::boxed::Box<Future>>::enter<alloc::boxed::Box<Future>,closure,core::result::Result<futures::poll::Async<()>, ()>>
             at C:\Users\Jan Debeuckelaer\.cargo\registry\src\github.com-1ecc6299db9ec823\futures-0.1.25\src\task_impl\mod.rs:396
  35: futures::task_impl::Spawn<alloc::boxed::Box<Future>>::poll_fn_notify<alloc::boxed::Box<Future>,tokio_current_thread::scheduler::Notify<tokio_reactor::Handle>,closure,core::result::Result<futures::poll::Async<()>, ()>>
             at C:\Users\Jan Debeuckelaer\.cargo\registry\src\github.com-1ecc6299db9ec823\futures-0.1.25\src\task_impl\mod.rs:288
  36: futures::task_impl::Spawn<alloc::boxed::Box<Future>>::poll_future_notify<alloc::boxed::Box<Future>,tokio_current_thread::scheduler::Notify<tokio_reactor::Handle>>
             at C:\Users\Jan Debeuckelaer\.cargo\registry\src\github.com-1ecc6299db9ec823\futures-0.1.25\src\task_impl\mod.rs:326
  37: tokio_current_thread::scheduler::Scheduled<tokio_reactor::Handle>::tick<tokio_reactor::Handle>
             at C:\Users\Jan Debeuckelaer\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-current-thread-0.1.6\src\scheduler.rs:351
  38: tokio_current_thread::scheduler::{{impl}}::tick::{{closure}}<tokio_reactor::Handle>
             at C:\Users\Jan Debeuckelaer\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-current-thread-0.1.6\src\scheduler.rs:330
  39: tokio_current_thread::{{impl}}::enter::{{closure}}::{{closure}}<tokio_reactor::Handle,closure,bool>
             at C:\Users\Jan Debeuckelaer\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-current-thread-0.1.6\src\lib.rs:788
  40: tokio_current_thread::CurrentRunner::set_spawn<closure,bool>
             at C:\Users\Jan Debeuckelaer\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-current-thread-0.1.6\src\lib.rs:825
  41: tokio_current_thread::{{impl}}::enter::{{closure}}<tokio_reactor::Handle,closure,bool>
             at C:\Users\Jan Debeuckelaer\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-current-thread-0.1.6\src\lib.rs:788
  42: std::thread::local::LocalKey<tokio_current_thread::CurrentRunner>::try_with<tokio_current_thread::CurrentRunner,closure,bool>
             at /rustc/2aa4c46cfdd726e97360c2734835aa3515e8c858\src\libstd\thread\local.rs:299
  43: std::thread::local::LocalKey<tokio_current_thread::CurrentRunner>::with<tokio_current_thread::CurrentRunner,closure,bool>
             at /rustc/2aa4c46cfdd726e97360c2734835aa3515e8c858\src\libstd\thread\local.rs:245
  44: tokio_current_thread::Borrow<tokio_reactor::Handle>::enter<tokio_reactor::Handle,closure,bool>
             at C:\Users\Jan Debeuckelaer\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-current-thread-0.1.6\src\lib.rs:786
  45: tokio_current_thread::scheduler::Scheduler<tokio_reactor::Handle>::tick<tokio_reactor::Handle>
             at C:\Users\Jan Debeuckelaer\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-current-thread-0.1.6\src\scheduler.rs:330
  46: tokio_current_thread::Entered<tokio_timer::timer::Timer<tokio_reactor::Reactor, tokio_timer::clock::clock::Clock>>::tick<tokio_timer::timer::Timer<tokio_reactor::Reactor, tokio_timer::clock::clock::Clock>>
             at C:\Users\Jan Debeuckelaer\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-current-thread-0.1.6\src\lib.rs:612
  47: tokio_current_thread::Entered<tokio_timer::timer::Timer<tokio_reactor::Reactor, tokio_timer::clock::clock::Clock>>::block_on<tokio_timer::timer::Timer<tokio_reactor::Reactor, tokio_timer::clock::clock::Clock>,futures::sync::oneshot::Receiver<i32>>
             at C:\Users\Jan Debeuckelaer\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-current-thread-0.1.6\src\lib.rs:502
  48: tokio::runtime::current_thread::runtime::{{impl}}::block_on::{{closure}}<futures::sync::oneshot::Receiver<i32>>
             at C:\Users\Jan Debeuckelaer\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-0.1.18\src\runtime\current_thread\runtime.rs:200
  49: tokio::runtime::current_thread::runtime::{{impl}}::enter::{{closure}}::{{closure}}::{{closure}}::{{closure}}<closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at C:\Users\Jan Debeuckelaer\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-0.1.18\src\runtime\current_thread\runtime.rs:241
  50: tokio_executor::global::with_default::{{closure}}<tokio_current_thread::TaskExecutor,closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at C:\Users\Jan Debeuckelaer\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-executor-0.1.7\src\global.rs:209
  51: std::thread::local::LocalKey<core::cell::Cell<tokio_executor::global::State>>::try_with<core::cell::Cell<tokio_executor::global::State>,closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at /rustc/2aa4c46cfdd726e97360c2734835aa3515e8c858\src\libstd\thread\local.rs:299
  52: std::thread::local::LocalKey<core::cell::Cell<tokio_executor::global::State>>::with<core::cell::Cell<tokio_executor::global::State>,closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at /rustc/2aa4c46cfdd726e97360c2734835aa3515e8c858\src\libstd\thread\local.rs:245
  53: tokio_executor::global::with_default<tokio_current_thread::TaskExecutor,closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at C:\Users\Jan Debeuckelaer\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-executor-0.1.7\src\global.rs:178
  54: tokio::runtime::current_thread::runtime::{{impl}}::enter::{{closure}}::{{closure}}::{{closure}}<closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at C:\Users\Jan Debeuckelaer\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-0.1.18\src\runtime\current_thread\runtime.rs:239
  55: tokio_timer::timer::handle::with_default::{{closure}}<closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at C:\Users\Jan Debeuckelaer\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-timer-0.2.10\src\timer\handle.rs:94
  56: std::thread::local::LocalKey<core::cell::RefCell<core::option::Option<tokio_timer::timer::handle::HandlePriv>>>::try_with<core::cell::RefCell<core::option::Option<tokio_timer::timer::handle::HandlePriv>>,closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at /rustc/2aa4c46cfdd726e97360c2734835aa3515e8c858\src\libstd\thread\local.rs:299
  57: std::thread::local::LocalKey<core::cell::RefCell<core::option::Option<tokio_timer::timer::handle::HandlePriv>>>::with<core::cell::RefCell<core::option::Option<tokio_timer::timer::handle::HandlePriv>>,closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at /rustc/2aa4c46cfdd726e97360c2734835aa3515e8c858\src\libstd\thread\local.rs:245
  58: tokio_timer::timer::handle::with_default<closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at C:\Users\Jan Debeuckelaer\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-timer-0.2.10\src\timer\handle.rs:81
  59: tokio::runtime::current_thread::runtime::{{impl}}::enter::{{closure}}::{{closure}}<closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at C:\Users\Jan Debeuckelaer\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-0.1.18\src\runtime\current_thread\runtime.rs:232
  60: tokio_timer::clock::clock::with_default::{{closure}}<closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at C:\Users\Jan Debeuckelaer\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-timer-0.2.10\src\clock\clock.rs:141
  61: std::thread::local::LocalKey<core::cell::Cell<core::option::Option<const tokio_timer::clock::clock::Clock*>>>::try_with<core::cell::Cell<core::option::Option<const tokio_timer::clock::clock::Clock*>>,closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at /rustc/2aa4c46cfdd726e97360c2734835aa3515e8c858\src\libstd\thread\local.rs:299
  62: std::thread::local::LocalKey<core::cell::Cell<core::option::Option<const tokio_timer::clock::clock::Clock*>>>::with<core::cell::Cell<core::option::Option<const tokio_timer::clock::clock::Clock*>>,closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at /rustc/2aa4c46cfdd726e97360c2734835aa3515e8c858\src\libstd\thread\local.rs:245
  63: tokio_timer::clock::clock::with_default<closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at C:\Users\Jan Debeuckelaer\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-timer-0.2.10\src\clock\clock.rs:124
  64: tokio::runtime::current_thread::runtime::{{impl}}::enter::{{closure}}<closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at C:\Users\Jan Debeuckelaer\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-0.1.18\src\runtime\current_thread\runtime.rs:231
  65: tokio_reactor::with_default::{{closure}}<closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at C:\Users\Jan Debeuckelaer\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-reactor-0.1.9\src\lib.rs:237
  66: std::thread::local::LocalKey<core::cell::RefCell<core::option::Option<tokio_reactor::HandlePriv>>>::try_with<core::cell::RefCell<core::option::Option<tokio_reactor::HandlePriv>>,closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at /rustc/2aa4c46cfdd726e97360c2734835aa3515e8c858\src\libstd\thread\local.rs:299
  67: std::thread::local::LocalKey<core::cell::RefCell<core::option::Option<tokio_reactor::HandlePriv>>>::with<core::cell::RefCell<core::option::Option<tokio_reactor::HandlePriv>>,closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at /rustc/2aa4c46cfdd726e97360c2734835aa3515e8c858\src\libstd\thread\local.rs:245
  68: tokio_reactor::with_default<closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at C:\Users\Jan Debeuckelaer\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-reactor-0.1.9\src\lib.rs:217
  69: tokio::runtime::current_thread::runtime::Runtime::enter<closure,core::result::Result<i32, futures::sync::oneshot::Canceled>>
             at C:\Users\Jan Debeuckelaer\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-0.1.18\src\runtime\current_thread\runtime.rs:230
  70: tokio::runtime::current_thread::runtime::Runtime::block_on<futures::sync::oneshot::Receiver<i32>>
             at C:\Users\Jan Debeuckelaer\.cargo\registry\src\github.com-1ecc6299db9ec823\tokio-0.1.18\src\runtime\current_thread\runtime.rs:198
  71: actix::system::SystemRunner::run
             at C:\Users\Jan Debeuckelaer\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-0.7.9\src\system.rs:174
  72: actix_web::server::http::HttpServer<actix_web::application::App<()>, closure>::run<actix_web::application::App<()>,closure>
             at C:\Users\Jan Debeuckelaer\.cargo\registry\src\github.com-1ecc6299db9ec823\actix-web-0.7.18\src\server\http.rs:539
  73: hello_cargo::main
             at .\src\main.rs:12
  74: std::rt::lang_start::{{closure}}<()>
             at /rustc/2aa4c46cfdd726e97360c2734835aa3515e8c858\src\libstd\rt.rs:64
  75: std::rt::lang_start_internal::{{closure}}
             at /rustc/2aa4c46cfdd726e97360c2734835aa3515e8c858\/src\libstd\rt.rs:49
  76: std::panicking::try::do_call<closure,i32>
             at /rustc/2aa4c46cfdd726e97360c2734835aa3515e8c858\/src\libstd\panicking.rs:297
  77: panic_unwind::__rust_maybe_catch_panic
             at /rustc/2aa4c46cfdd726e97360c2734835aa3515e8c858\/src\libpanic_unwind\lib.rs:92
             at /rustc/2aa4c46cfdd726e97360c2734835aa3515e8c858\/src\libstd\panicking.rs:276
  79: std::panic::catch_unwind
             at /rustc/2aa4c46cfdd726e97360c2734835aa3515e8c858\/src\libstd\panic.rs:388
  80: std::rt::lang_start_internal
             at /rustc/2aa4c46cfdd726e97360c2734835aa3515e8c858\/src\libstd\rt.rs:48
  81: std::rt::lang_start<()>
             at /rustc/2aa4c46cfdd726e97360c2734835aa3515e8c858\src\libstd\rt.rs:64
  83: invoke_main
             at d:\agent\_work\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:78
  84: __scrt_common_main_seh
             at d:\agent\_work\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288
  85: BaseThreadInitThunk
  86: RtlUserThreadStart
Panic in Arbiter thread, shutting down system.

我也发现了这个,我认为这与 tokio lib 中的这两个问题有关: