Example Actix 2.x REST application implementing many features

Overview

Rust/Actix Example

Build Status

An Actix 2.0 REST server using the Rust language.

Motivation

Actix Web is a fast, powerful web framework for building web applications in Rust. This project aims to create ergonomic abstractions comparable to frameworks in other languages while attempting to maintain the performance benefits of Actix.

Features

  • Actix 2.x HTTP Server
  • Multi-Database Support (CockroachDB, Postgres, MySQL, Sqlite)
  • JWT Support
  • Async Caching Layer with a Simple API
  • Public and Secure Static File Service
  • Diesel Database Operations are Non-Blocking
  • Filesystem Organized for Scale
  • .env for Local Development
  • Integrated Application State with a Simple API
  • Lazy Static Config struct
  • Built-in Healthcheck (includes cargo version info)
  • Listeners configured for TDD
  • Custom Errors and HTTP Payload/Json Validation
  • Secure Argon2i Password Hashing
  • CORS Support
  • Unit and Integration Tests
  • Test Coverage Reports
  • Dockerfile for Running the Server in a Container
  • TravisCI Integration

Featured Packages

  • Argon2i: Argon2i Password Hasning
  • actix-cors: CORS Support
  • actix-identity: User Authentication
  • actix-redis and redis-async: Async Caching Layer
  • actix-web: Actix Web Server
  • derive_more: Error Formatting
  • diesel: ORM that Operates on Several Databases
  • dotenv: Configuration Loader (.env)
  • envy: Deserializes Environment Variables into a Config Struct
  • jsonwebtoken: JWT encoding/decoding
  • kcov: Coverage Analysis
  • listenfd: Listens for Filesystem Changes
  • rayon: Parallelize
  • r2d2: Database Connection Pooling
  • validator: Validates incoming Json

Installation

Clone the repo and cd into the repo:

git clone https://github.com/ddimaria/rust-actix-example.git
cd rust-actix-example

Copy over the example .env file:

cp .env.example .env

IMPORTANT: Change .env values for your setup, paying special attention to the salt and various keys.

After you set the DATABASE value in .env, you'll need it to match the default value in the features section in Cargo.toml with the DATABASE value in .env:

[features]
cockroach = []
mysql = []
postgres = []
sqlite = []
default = ["mysql"]

note: Only supply a SINGLE database in the default array.

Next, you'll need to install the Diesel CLI:

cargo install diesel_cli

If you run into errors, see http://diesel.rs/guides/getting-started/

Now run the migrations via the Diesel CLI:

diesel migration run

Running the Server

To startup the server:

cargo run

Autoreloading

To startup the server and autoreload on code changes:

systemfd --no-pid -s http::3000 -- cargo watch -x run

Tests

Integration tests are in the /src/tests folder. There are helper functions to make testing the API straightforward. For example, if we want to test the GET /api/v1/user route:

  use crate::tests::helpers::tests::assert_get;

  #[test]
  async fn test_get_users() {
      assert_get("/api/v1/user").await;
  }

Using the Actix test server, the request is sent and the response is asserted for a successful response:

assert!(response.status().is_success());

Similarly, to test a POST route:

use crate::handlers::user::CreateUserRequest;
use crate::tests::helpers::tests::assert_post;

#[test]
async fn test_create_user() {
    let params = CreateUserRequest {
        first_name: "Satoshi".into(),
        last_name: "Nakamoto".into(),
        email: "[email protected]".into(),
    };
    assert_post("/api/v1/user", params).await;
}

Running Tests

To run all of the tests:

cargo test

Test Covearage

I created a repo on DockerHub that I'll update with each Rust version (starting at 1.37), whose tags will match the Rust version.

In the root of the project:

docker run -it --rm --security-opt seccomp=unconfined --volume "${PWD}":/volume --workdir /volume ddimaria/rust-kcov:1.37 --exclude-pattern=/.cargo,/usr/lib,/src/main.rs,src/server.rs

note: coverage takes a long time to run (up to 30 mins).

You can view the HTML output of the report at target/cov/index.html

Docker

To build a Docker image of the application:

docker build -t rust_actix_example .

Once the image is built, you can run the container in port 3000:

docker run -it --rm --env-file=.env.docker -p 3000:3000 --name rust_actix_example rust_actix_example

Public Static Files

Static files are served up from the /static folder. Directory listing is turned off. Index files are supported (index.html).

Example:

curl -X GET http://127.0.0.1:3000/test.html

Secure Static Files

To serve static files to authenticated users only, place them in the /static-secure folder. These files are referenced using the root-level /secure path.

Example:

curl -X GET http://127.0.0.1:3000/secure/test.html

Application State

A shared, mutable hashmap is automatically added to the server. To invoke this data in a handler, simply add data: AppState<'_, String> to the function signature.

Helper Functions

get<T>(data: AppState<T>, key: &str) -> Option<T>

Retrieves a copy of the entry in application state by key.

Example:

use create::state::get;

pub async fn handle(data: AppState<'_, String>) -> impl Responder {
  let key = "SOME_KEY";
  let value = get(data, key);
  assert_eq!(value, Some("123".to_string()));
}

set<T>(data: AppState<T>, key: &str, value: T) -> Option<T>

Inserts or updates an entry in application state.

Example:

use create::state::set;

pub async fn handle(data: AppState<'_, String>) -> impl Responder {
  let key = "SOME_KEY";
  let value = set(data, key, "123".into());
  assert_eq!(value, None)); // if this is an insert
  assert_eq!(value, Some("123".to_string())); // if this is an update
}

delete<T>(data: AppState<T>, key: &str) -> Option<T>

Deletes an entry in application state by key.

Example:

use create::state::get;

pub async fn handle(data: AppState<'_, String>) -> impl Responder {
  let key = "SOME_KEY";
  let value = delete(data, key);
  assert_eq!(value, None);
}

Application Cache

Asynchronous access to redis is automatically added to the server if a value is provided for the REDIS_URL environment variable. To invoke this data in a handler, simply add cache: Cache to the function signature.

Helper Functions

get(cache: Cache, key: &str) -> Result<String, ApiError>

Retrieves a copy of the entry in the application cache by key.

Example:

use crate::cache::{get, Cache};

pub async fn handle(cache: Cache) -> impl Responder {
  let key = "SOME_KEY";
  let value = get(cache, key).await?;
  assert_eq!(value, "123");
}

set(cache: Cache, key: &str, value: &str) -> Result<String, ApiError>

Inserts or updates an entry in the application cache.

Example:

use crate::cache::{set, Cache};

pub async fn handle(cache: Cache) -> impl Responder {
  let key = "SOME_KEY";
  set(cache, key, "123").await?;
}

delete(cache: Cache, key: &str) -> Result<String, ApiError>

Deletes an entry in the application cache by key.

Example:

use crate::cache::{delete, Cache};

pub async fn handle(cache: Cache) -> impl Responder {
  let key = "SOME_KEY";
  delete(cache, key).await?;
}

Non-Blocking Diesel Database Operations

When accessing a database via Diesel, operations block the main server thread. This blocking can be mitigated by running the blocking code in a thread pool from within the handler.

Example:

pub async fn get_user(
    user_id: Path<Uuid>,
    pool: Data<PoolType>,
) -> Result<Json<UserResponse>, ApiError> {
    let user = block(move || find(&pool, *user_id)).await?;
    respond_json(user)
}

Blocking errors are automatically converted into ApiErrors to keep the api simple:

impl From<BlockingError<ApiError>> for ApiError {
    fn from(error: BlockingError<ApiError>) -> ApiError {
        match error {
            BlockingError::Error(api_error) => api_error,
            BlockingError::Canceled => ApiError::BlockingError("Thread blocking error".into()),
        }
    }
}

Endpoints

Healthcheck

Determine if the system is healthy.

GET /health

Response

{
  "status": "ok",
  "version": "0.1.0"
}

Example:

curl -X GET http://127.0.0.1:3000/health

Login

POST /api/v1/auth/login

Request

Param Type Description Required Validations
email String The user's email address yes valid email address
password String The user's password yes at least 6 characters
{
  "email": "[email protected]",
  "password": "123456"
}

Response

Header

HTTP/1.1 200 OK
content-length: 118
content-type: application/json
set-cookie: auth=COOKIE_VALUE_HERE; HttpOnly; Path=/; Max-Age=1200
date: Tue, 15 Oct 2019 02:04:54 GMT

Json Body

{
  "id": "0c419802-d1ef-47d6-b8fa-c886a23d61a7",
  "first_name": "Linus",
  "last_name": "Torvalds",
  "email": "[email protected]"
}

When sending subsequent requests, create a header variable cookie with the value auth=COOKIE_VALUE_HERE

Logout

GET /api/v1/auth/logout

Response

200 OK

Example:

curl -X GET http://127.0.0.1:3000/api/v1/auth/logout

Get All Users

GET /api/v1/user

Response

[
  {
    "id": "a421a56e-8652-4da6-90ee-59dfebb9d1b4",
    "first_name": "Satoshi",
    "last_name": "Nakamoto",
    "email": "[email protected]"
  },
  {
    "id": "c63d285b-7794-4419-bfb7-86d7bb3ff17d",
    "first_name": "Barbara",
    "last_name": "Liskov",
    "email": "[email protected]"
  }
]

Example:

curl -X GET http://127.0.0.1:3000/api/v1/user

Get a User

GET /api/v1/user/{id}

Request

Param Type Description
id Uuid The user's id

Response

{
  "id": "a421a56e-8652-4da6-90ee-59dfebb9d1b4",
  "first_name": "Satoshi",
  "last_name": "Nakamoto",
  "email": "[email protected]"
}

Example:

curl -X GET http://127.0.0.1:3000/api/v1/user/a421a56e-8652-4da6-90ee-59dfebb9d1b4

Response - Not Found

404 Not Found

{
  "errors": ["User c63d285b-7794-4419-bfb7-86d7bb3ff17a not found"]
}

Create a User

POST /api/v1/user

Request

Param Type Description Required Validations
first_name String The user's first name yes at least 3 characters
last_name String The user's last name yes at least 3 characters
email String The user's email address yes valid email address
{
  "first_name": "Linus",
  "last_name": "Torvalds",
  "email": "[email protected]"
}

Response

{
  "id": "0c419802-d1ef-47d6-b8fa-c886a23d61a7",
  "first_name": "Linus",
  "last_name": "Torvalds",
  "email": "[email protected]"
}

Example:

curl -X POST \
  http://127.0.0.1:3000/api/v1/user \
  -H 'Content-Type: application/json' \
  -d '{
    "first_name": "Linus",
    "last_name": "Torvalds",
    "email": "[email protected]"
}'

Response - Validation Errors

422 Unprocessable Entity

{
  "errors": [
    "first_name is required and must be at least 3 characters",
    "last_name is required and must be at least 3 characters",
    "email must be a valid email"
  ]
}

Update a User

PUT /api/v1/{id}

Request

Path

Param Type Description
id Uuid The user's id

Body

Param Type Description Required Validations
first_name String The user's first name yes at least 3 characters
last_name String The user's last name yes at least 3 characters
email String The user's email address yes valid email address
{
  "first_name": "Linus",
  "last_name": "Torvalds",
  "email": "[email protected]"
}

Response

{
  "id": "0c419802-d1ef-47d6-b8fa-c886a23d61a7",
  "first_name": "Linus",
  "last_name": "Torvalds",
  "email": "[email protected]"
}

Example:

curl -X PUT \
  http://127.0.0.1:3000/api/v1/user/0c419802-d1ef-47d6-b8fa-c886a23d61a7 \
  -H 'Content-Type: application/json' \
  -d '{
    "first_name": "Linus",
    "last_name": "Torvalds",
    "email": "[email protected]"
}'

Response - Validation Errors

422 Unprocessable Entity

{
  "errors": [
    "first_name is required and must be at least 3 characters",
    "last_name is required and must be at least 3 characters",
    "email must be a valid email"
  ]
}

Response - Not Found

404 Not Found

{
  "errors": ["User 0c419802-d1ef-47d6-b8fa-c886a23d61a7 not found"]
}

Delete a User

DELETE /api/v1/user/{id}

Request

Param Type Description
id Uuid The user's id

Response

{
  "id": "a421a56e-8652-4da6-90ee-59dfebb9d1b4",
  "first_name": "Satoshi",
  "last_name": "Nakamoto",
  "email": "[email protected]"
}

Response

200 OK

Example:

curl -X DELETE http://127.0.0.1:3000/api/v1/user/a421a56e-8652-4da6-90ee-59dfebb9d1b4

Response - Not Found

404 Not Found

{
  "errors": ["User c63d285b-7794-4419-bfb7-86d7bb3ff17a not found"]
}

License

This project is licensed under:

Comments
  • Diesel migration run will fail with sqlite

    Diesel migration run will fail with sqlite

    On the up.sql script that is used as a first migration.

    This: created_at TIMESTAMP NOT NULL DEFAULT NOW(), fails when using sqlite as a database.

    One way to solve it is to replace it with: created_at TIMESTAMP NOT NULL DEFAULT (strftime('%s','now')),

    opened by abariatti 0
  • Cannot start app

    Cannot start app

    thread 'main' panicked at 'Configuration Error: Custom( "invalid digit found in string while parsing value 'short' provided by RUST_BACKTRACE", )', src/config.rs:43:23

    stack backtrace:
       0: backtrace::backtrace::libunwind::trace
                 at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.40/src/backtrace/libunwind.rs:88
       1: backtrace::backtrace::trace_unsynchronized
                 at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.40/src/backtrace/mod.rs:66
       2: std::sys_common::backtrace::_print_fmt
                 at src/libstd/sys_common/backtrace.rs:77
       3: <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt
                 at src/libstd/sys_common/backtrace.rs:61
       4: core::fmt::write
                 at src/libcore/fmt/mod.rs:1028
       5: std::io::Write::write_fmt
                 at src/libstd/io/mod.rs:1412
       6: std::sys_common::backtrace::_print
                 at src/libstd/sys_common/backtrace.rs:65
       7: std::sys_common::backtrace::print
                 at src/libstd/sys_common/backtrace.rs:50
       8: std::panicking::default_hook::{{closure}}
                 at src/libstd/panicking.rs:188
       9: std::panicking::default_hook
                 at src/libstd/panicking.rs:205
      10: std::panicking::rust_panic_with_hook
                 at src/libstd/panicking.rs:464
      11: std::panicking::continue_panic_fmt
                 at src/libstd/panicking.rs:373
      12: std::panicking::begin_panic_fmt
                 at src/libstd/panicking.rs:328
      13: rust_actix_example::config::get_config
                 at src/config.rs:43
      14: <rust_actix_example::config::CONFIG as core::ops::deref::Deref>::deref::__static_ref_initialize
                 at src/config.rs:34
      15: core::ops::function::FnOnce::call_once
                 at /rustc/73528e339aae0f17a15ffa49a8ac608f50c6cf14/src/libcore/ops/function.rs:227
      16: lazy_static::lazy::Lazy<T>::get::{{closure}}
                 at /home/venny/.cargo/registry/src/github.com-1ecc6299db9ec823/lazy_static-1.4.0/src/inline_lazy.rs:31
      17: std::sync::once::Once::call_once::{{closure}}
                 at /rustc/73528e339aae0f17a15ffa49a8ac608f50c6cf14/src/libstd/sync/once.rs:224
      18: std::sync::once::Once::call_inner
                 at src/libstd/sync/once.rs:391
      19: std::sync::once::Once::call_once
                 at /rustc/73528e339aae0f17a15ffa49a8ac608f50c6cf14/src/libstd/sync/once.rs:224
      20: lazy_static::lazy::Lazy<T>::get
                 at /home/venny/.cargo/registry/src/github.com-1ecc6299db9ec823/lazy_static-1.4.0/src/inline_lazy.rs:30
      21: <rust_actix_example::config::CONFIG as core::ops::deref::Deref>::deref::__stability
                 at ./<::lazy_static::__lazy_static_internal macros>:16
      22: <rust_actix_example::config::CONFIG as core::ops::deref::Deref>::deref
                 at ./<::lazy_static::__lazy_static_internal macros>:18
      23: rust_actix_example::server::server::{{closure}}
                 at src/server.rs:37
      24: <std::future::GenFuture<T> as core::future::future::Future>::poll::{{closure}}
                 at /rustc/73528e339aae0f17a15ffa49a8ac608f50c6cf14/src/libstd/future.rs:43
      25: std::future::set_task_context
                 at /rustc/73528e339aae0f17a15ffa49a8ac608f50c6cf14/src/libstd/future.rs:79
      26: <std::future::GenFuture<T> as core::future::future::Future>::poll
                 at /rustc/73528e339aae0f17a15ffa49a8ac608f50c6cf14/src/libstd/future.rs:43
      27: std::future::poll_with_tls_context::{{closure}}
                 at /rustc/73528e339aae0f17a15ffa49a8ac608f50c6cf14/src/libstd/future.rs:121
      28: std::future::get_task_context
                 at /rustc/73528e339aae0f17a15ffa49a8ac608f50c6cf14/src/libstd/future.rs:111
      29: std::future::poll_with_tls_context
                 at /rustc/73528e339aae0f17a15ffa49a8ac608f50c6cf14/src/libstd/future.rs:121
      30: rust_actix_example::main::{{closure}}
                 at src/main.rs:33
      31: <std::future::GenFuture<T> as core::future::future::Future>::poll::{{closure}}
                 at /rustc/73528e339aae0f17a15ffa49a8ac608f50c6cf14/src/libstd/future.rs:43
      32: std::future::set_task_context
                 at /rustc/73528e339aae0f17a15ffa49a8ac608f50c6cf14/src/libstd/future.rs:79
      33: <std::future::GenFuture<T> as core::future::future::Future>::poll
                 at /rustc/73528e339aae0f17a15ffa49a8ac608f50c6cf14/src/libstd/future.rs:43
      34: <tokio::task::local::LocalFuture<F> as core::future::future::Future>::poll::{{closure}}
                 at /home/venny/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:403
      35: tokio::task::local::Scheduler::with::{{closure}}
                 at /home/venny/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:478
      36: std::thread::local::LocalKey<T>::try_with
                 at /rustc/73528e339aae0f17a15ffa49a8ac608f50c6cf14/src/libstd/thread/local.rs:262
      37: std::thread::local::LocalKey<T>::with
                 at /rustc/73528e339aae0f17a15ffa49a8ac608f50c6cf14/src/libstd/thread/local.rs:239
      38: tokio::task::local::Scheduler::with
                 at /home/venny/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:474
      39: <tokio::task::local::LocalFuture<F> as core::future::future::Future>::poll
                 at /home/venny/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:402
      40: std::future::poll_with_tls_context::{{closure}}
                 at /rustc/73528e339aae0f17a15ffa49a8ac608f50c6cf14/src/libstd/future.rs:121
      41: std::future::get_task_context
                 at /rustc/73528e339aae0f17a15ffa49a8ac608f50c6cf14/src/libstd/future.rs:111
      42: std::future::poll_with_tls_context
                 at /rustc/73528e339aae0f17a15ffa49a8ac608f50c6cf14/src/libstd/future.rs:121
      43: tokio::task::local::LocalSet::run_until::{{closure}}
                 at /home/venny/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:358
      44: <std::future::GenFuture<T> as core::future::future::Future>::poll::{{closure}}
                 at /rustc/73528e339aae0f17a15ffa49a8ac608f50c6cf14/src/libstd/future.rs:43
      45: std::future::set_task_context
                 at /rustc/73528e339aae0f17a15ffa49a8ac608f50c6cf14/src/libstd/future.rs:79
      46: <std::future::GenFuture<T> as core::future::future::Future>::poll
                 at /rustc/73528e339aae0f17a15ffa49a8ac608f50c6cf14/src/libstd/future.rs:43
      47: tokio::runtime::basic_scheduler::BasicScheduler<P>::block_on
                 at /home/venny/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/runtime/basic_scheduler.rs:138
      48: tokio::runtime::Runtime::block_on::{{closure}}
                 at /home/venny/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/runtime/mod.rs:411
      49: tokio::runtime::context::enter
                 at /home/venny/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/runtime/context.rs:72
      50: tokio::runtime::handle::Handle::enter
                 at /home/venny/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/runtime/handle.rs:34
      51: tokio::runtime::Runtime::block_on
                 at /home/venny/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/runtime/mod.rs:408
      52: tokio::task::local::LocalSet::block_on
                 at /home/venny/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:321
      53: actix_rt::runtime::Runtime::block_on
                 at /home/venny/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-rt-1.0.0/src/runtime.rs:89
      54: actix_rt::builder::SystemRunner::block_on
                 at /home/venny/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-rt-1.0.0/src/builder.rs:187
      55: rust_actix_example::main
                 at src/main.rs:31
      56: std::rt::lang_start::{{closure}}
                 at /rustc/73528e339aae0f17a15ffa49a8ac608f50c6cf14/src/libstd/rt.rs:61
      57: std::rt::lang_start_internal::{{closure}}
                 at src/libstd/rt.rs:48
      58: std::panicking::try::do_call
                 at src/libstd/panicking.rs:287
      59: __rust_maybe_catch_panic
                 at src/libpanic_unwind/lib.rs:78
      60: std::panicking::try
                 at src/libstd/panicking.rs:265
      61: std::panic::catch_unwind
                 at src/libstd/panic.rs:396
      62: std::rt::lang_start_internal
                 at src/libstd/rt.rs:47
      63: std::rt::lang_start
                 at /rustc/73528e339aae0f17a15ffa49a8ac608f50c6cf14/src/libstd/rt.rs:61
      64: main
      65: __libc_start_main
      66: _start
    note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
    Panic in Arbiter thread.
    
    Process finished with exit code 101
    
    opened by vendelieu 1
  • Can not run API

    Can not run API

    i have installed demo and try to access: http://127.0.0.1:3000/user however, i got this: The system cannot find the file specified. (os error 2)

    Also, tried: http://127.0.0.1:3000/user/00000000-0000-0000-0000-000000000000 and get this [2020-04-30T05:49:58Z INFO actix_web::middleware::logger] 127.0.0.1:52709 "GET /user/00000000-0000-0000-0000-000000000000 HTTP/1.1" 404 55 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36" 0.000000 The system cannot find the path specified. (os error 3)

    opened by vietlib 1
  • Salt to user table

    Salt to user table

    Add salt column to user table and generate a random salt on user add. For password hashing combine the generated salt and env variable salt.

    This adds extra protection against cases when database might be comprised. If salt is unique, then guessing one password does not give good hints for other passwords.

    opened by maitsarv 4
  • Error happened when running the demo

    Error happened when running the demo

    ENV

    Ubuntu 18.04 in VMware

    $ rustc --version
    rustc 1.42.0 (b8cedc004 2020-03-09)
    

    steps

    follow the README.md:

    1. install postgres
    2. install diesel_cli(to make it succeed, I install mysql, libsqlite3-dev and so on)
    3. modify the Cargo.toml:
    [features]
    cockroach = []
    mysql = []
    postgres = []
    sqlite = []
    default = ["postgres"]
    
    1. modify the .env I JUST modify the DATABASE_URL to postgres link.
    2. diesel migration run it succeeds
    3. run:
    cargo run
    

    Problem

    What should I do to just use postgres? Because I think problem is caused by the program trying to connect other database like mysql, redis and so on: log:

    $ cargo run
        Finished dev [unoptimized + debuginfo] target(s) in 0.15s
         Running `target/debug/rust_actix_example`
    [2020-04-08T02:46:17Z INFO  actix_server::builder] Starting 8 workers
    [2020-04-08T02:46:17Z INFO  actix_server::builder] Starting "actix-web-service-127.0.0.1:3000" service on 127.0.0.1:3000
    thread 'actix-rt:worker:1' panicked at 'Failed to create connection pool: Error(Some("MySQL connection URLs must be in the form `mysql://[[user]:[password]@]host[:port][/database]`"))', src/database.rs:75:16
    stack backtrace:
       0: backtrace::backtrace::libunwind::trace
                 at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.40/src/backtrace/libunwind.rs:88
       1: backtrace::backtrace::trace_unsynchronized
                 at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.40/src/backtrace/mod.rs:66
       2: std::sys_common::backtrace::_print_fmt
                 at src/libstd/sys_common/backtrace.rs:77
       3: <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt
                 at src/libstd/sys_common/backtrace.rs:59
       4: core::fmt::write
                 at src/libcore/fmt/mod.rs:1052
       5: std::io::Write::write_fmt
                 at src/libstd/io/mod.rs:1426
       6: std::sys_common::backtrace::_print
                 at src/libstd/sys_common/backtrace.rs:62
       7: std::sys_common::backtrace::print
                 at src/libstd/sys_common/backtrace.rs:49
       8: std::panicking::default_hook::{{closure}}
                 at src/libstd/panicking.rs:204
       9: std::panicking::default_hook
                 at src/libstd/panicking.rs:224
      10: std::panicking::rust_panic_with_hook
                 at src/libstd/panicking.rs:472
      11: rust_begin_unwind
                 at src/libstd/panicking.rs:380
      12: core::panicking::panic_fmt
                 at src/libcore/panicking.rs:85
      13: core::option::expect_none_failed
                 at src/libcore/option.rs:1199
      14: core::result::Result<T,E>::expect
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libcore/result.rs:991
      15: rust_actix_example::database::add_pool
                 at src/database.rs:75
      16: core::ops::function::FnOnce::call_once
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libcore/ops/function.rs:232
      17: actix_web::app::App<T,B>::configure
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-web-2.0.0/src/app.rs:183
      18: rust_actix_example::server::server::{{closure}}::{{closure}}
                 at src/server.rs:24
      19: actix_web::server::HttpServer<F,I,S,B>::listen::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-web-2.0.0/src/server.rs:261
      20: <F as actix_server::service::ServiceFactory<I>>::create
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-server-1.0.1/src/service.rs:183
      21: <actix_server::service::StreamNewService<F,Io> as actix_server::service::InternalServiceFactory>::create
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-server-1.0.1/src/service.rs:148
      22: <alloc::boxed::Box<dyn actix_server::service::InternalServiceFactory> as actix_server::service::InternalServiceFactory>::create
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-server-1.0.1/src/service.rs:170
      23: actix_server::worker::Worker::start::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-server-1.0.1/src/worker.rs:189
      24: <std::future::GenFuture<T> as core::future::future::Future>::poll
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/future.rs:43
      25: <core::pin::Pin<P> as core::future::future::Future>::poll
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libcore/future/future.rs:119
      26: <alloc::boxed::Box<F> as core::future::future::Future>::poll
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/liballoc/boxed.rs:1131
      27: tokio::task::core::Core<T>::poll
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/core.rs:128
      28: tokio::task::harness::Harness<T,S>::poll::{{closure}}::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/harness.rs:120
      29: core::ops::function::FnOnce::call_once
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libcore/ops/function.rs:232
      30: <std::panic::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/panic.rs:318
      31: std::panicking::try::do_call
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/panicking.rs:305
      32: __rust_maybe_catch_panic
                 at src/libpanic_unwind/lib.rs:86
      33: std::panicking::try
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/panicking.rs:281
      34: std::panic::catch_unwind
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/panic.rs:394
      35: tokio::task::harness::Harness<T,S>::poll::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/harness.rs:101
      36: tokio::loom::std::causal_cell::CausalCell<T>::with_mut
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/loom/std/causal_cell.rs:41
      37: tokio::task::harness::Harness<T,S>::poll
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/harness.rs:100
      38: tokio::task::raw::poll
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/raw.rs:162
      39: tokio::task::raw::RawTask::poll
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/raw.rs:113
      40: tokio::task::Task<S>::run
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/mod.rs:381
      41: tokio::task::local::Scheduler::tick
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:513
      42: <tokio::task::local::LocalFuture<F> as core::future::future::Future>::poll::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:407
      43: tokio::task::local::Scheduler::with::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:478
      44: std::thread::local::LocalKey<T>::try_with
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/thread/local.rs:262
      45: std::thread::local::LocalKey<T>::with
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/thread/local.rs:239
      46: tokio::task::local::Scheduler::with
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:474
      47: <tokio::task::local::LocalFuture<F> as core::future::future::Future>::poll
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:402
      48: std::future::poll_with_tls_context
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/future.rs:98
      49: tokio::task::local::LocalSet::run_until::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:358
      50: <std::future::GenFuture<T> as core::future::future::Future>::poll
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/future.rs:43
      51: tokio::runtime::basic_scheduler::BasicScheduler<P>::block_on
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/runtime/basic_scheduler.rs:138
      52: tokio::runtime::Runtime::block_on::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/runtime/mod.rs:411
      53: tokio::runtime::context::enter
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/runtime/context.rs:72
      54: tokio::runtime::handle::Handle::enter
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/runtime/handle.rs:34
      55: tokio::runtime::Runtime::block_on
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/runtime/mod.rs:408
      56: tokio::task::local::LocalSet::block_on
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:321
      57: actix_rt::runtime::Runtime::block_on
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-rt-1.0.0/src/runtime.rs:89
      58: actix_rt::arbiter::Arbiter::new::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-rt-1.0.0/src/arbiter.rs:125
    note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
    thread 'actix-rt:worker:0' panicked at 'called `Result::unwrap()` on an `Err` value: "PoisonError { inner: .. }"', /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-web-2.0.0/src/server.rs:250:25
    stack backtrace:
       0: backtrace::backtrace::libunwind::trace
                 at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.40/src/backtrace/libunwind.rs:88
       1: backtrace::backtrace::trace_unsynchronized
                 at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.40/src/backtrace/mod.rs:66
       2: std::sys_common::backtrace::_print_fmt
                 at src/libstd/sys_common/backtrace.rs:77
       3: <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt
                 at src/libstd/sys_common/backtrace.rs:59
       4: core::fmt::write
                 at src/libcore/fmt/mod.rs:1052
       5: std::io::Write::write_fmt
                 at src/libstd/io/mod.rs:1426
       6: std::sys_common::backtrace::_print
                 at src/libstd/sys_common/backtrace.rs:62
       7: std::sys_common::backtrace::print
                 at src/libstd/sys_common/backtrace.rs:49
       8: std::panicking::default_hook::{{closure}}
                 at src/libstd/panicking.rs:204
       9: std::panicking::default_hook
                 at src/libstd/panicking.rs:224
      10: std::panicking::rust_panic_with_hook
                 at src/libstd/panicking.rs:472
      11: rust_begin_unwind
                 at src/libstd/panicking.rs:380
      12: core::panicking::panic_fmt
                 at src/libcore/panicking.rs:85
      13: core::option::expect_none_failed
                 at src/libcore/option.rs:1199
      14: core::result::Result<T,E>::unwrap
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libcore/result.rs:963
      15: actix_web::server::HttpServer<F,I,S,B>::listen::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-web-2.0.0/src/server.rs:250
      16: <F as actix_server::service::ServiceFactory<I>>::create
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-server-1.0.1/src/service.rs:183
      17: <actix_server::service::StreamNewService<F,Io> as actix_server::service::InternalServiceFactory>::create
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-server-1.0.1/src/service.rs:148
      18: <alloc::boxed::Box<dyn actix_server::service::InternalServiceFactory> as actix_server::service::InternalServiceFactory>::create
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-server-1.0.1/src/service.rs:170
      19: actix_server::worker::Worker::start::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-server-1.0.1/src/worker.rs:189
      20: <std::future::GenFuture<T> as core::future::future::Future>::poll
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/future.rs:43
      21: <core::pin::Pin<P> as core::future::future::Future>::poll
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libcore/future/future.rs:119
      22: <alloc::boxed::Box<F> as core::future::future::Future>::poll
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/liballoc/boxed.rs:1131
      23: tokio::task::core::Core<T>::poll
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/core.rs:128
      24: tokio::task::harness::Harness<T,S>::poll::{{closure}}::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/harness.rs:120
      25: core::ops::function::FnOnce::call_once
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libcore/ops/function.rs:232
      26: <std::panic::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/panic.rs:318
      27: std::panicking::try::do_call
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/panicking.rs:305
      28: __rust_maybe_catch_panic
                 at src/libpanic_unwind/lib.rs:86
      29: std::panicking::try
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/panicking.rs:281
      30: std::panic::catch_unwind
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/panic.rs:394
      31: tokio::task::harness::Harness<T,S>::poll::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/harness.rs:101
      32: tokio::loom::std::causal_cell::CausalCell<T>::with_mut
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/loom/std/causal_cell.rs:41
      33: tokio::task::harness::Harness<T,S>::poll
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/harness.rs:100
      34: tokio::task::raw::poll
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/raw.rs:162
      35: tokio::task::raw::RawTask::poll
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/raw.rs:113
      36: tokio::task::Task<S>::run
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/mod.rs:381
      37: tokio::task::local::Scheduler::tick
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:513
      38: <tokio::task::local::LocalFuture<F> as core::future::future::Future>::poll::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:407
      39: tokio::task::local::Scheduler::with::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:478
      40: std::thread::local::LocalKey<T>::try_with
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/thread/local.rs:262
      41: std::thread::local::LocalKey<T>::with
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/thread/local.rs:239
      42: tokio::task::local::Scheduler::with
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:474
      43: <tokio::task::local::LocalFuture<F> as core::future::future::Future>::poll
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:402
      44: std::future::poll_with_tls_context
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/future.rs:98
      45: tokio::task::local::LocalSet::run_until::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:358
      46: <std::future::GenFuture<T> as core::future::future::Future>::poll
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/future.rs:43
      47: tokio::runtime::basic_scheduler::BasicScheduler<P>::block_on
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/runtime/basic_scheduler.rs:138
      48: tokio::runtime::Runtime::block_on::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/runtime/mod.rs:411
      49: tokio::runtime::context::enter
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/runtime/context.rs:72
      50: tokio::runtime::handle::Handle::enter
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/runtime/handle.rs:34
      51: tokio::runtime::Runtime::block_on
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/runtime/mod.rs:408
      52: tokio::task::local::LocalSet::block_on
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:321
      53: actix_rt::runtime::Runtime::block_on
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-rt-1.0.0/src/runtime.rs:89
      54: actix_rt::arbiter::Arbiter::new::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-rt-1.0.0/src/arbiter.rs:125
    note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
    thread 'actix-rt:worker:2' panicked at 'called `Result::unwrap()` on an `Err` value: "PoisonError { inner: .. }"', /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-web-2.0.0/src/server.rs:250:25
    stack backtrace:
       0: backtrace::backtrace::libunwind::[2020-04-08T02:46:48Z ERROR actix_redis::redis] Can not connect to redis server: Connection refused (os error 111)
    trace
                 at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.40/src/backtrace/libunwind.rs:88
       1: backtrace::backtrace::trace_unsynchronized
                 at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.40/src/backtrace/mod.rs:66
       2: std::sys_common::backtrace::_print_fmt
                 at src/libstd/sys_common/backtrace.rs:77
       3: <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt
                 at src/libstd/sys_common/backtrace.rs:59
       4: core::fmt::write
                 at src/libcore/fmt/mod.rs:1052
       5: std::io::Write::write_fmt
                 at src/libstd/io/mod.rs:1426
       6: std::sys_common::backtrace::_print
                 at src/libstd/sys_common/backtrace.rs:62
       7: std::sys_common::backtrace::print
                 at src/libstd/sys_common/backtrace.rs:49
       8: std::panicking::default_hook::{{closure}}
                 at src/libstd/panicking.rs:204
       9: std::panicking::default_hook
                 at src/libstd/panicking.rs:224
      10: std::panicking::rust_panic_with_hook
                 at src/libstd/panicking.rs:472
      11: rust_begin_unwind
                 at src/libstd/panicking.rs:380
      12: core::panicking::panic_fmt
                 at src/libcore/panicking.rs:85
      13: core::option::expect_none_failed
                 at src/libcore/option.rs:1199
      14: core::result::Result<T,E>::unwrap
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libcore/result.rs:963
      15: actix_web::server::HttpServer<F,I,S,B>::listen::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-web-2.0.0/src/server.rs:250
      16: <F as actix_server::service::ServiceFactory<I>>::create
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-server-1.0.1/src/service.rs:183
      17: <actix_server::service::StreamNewService<F,Io> as actix_server::service::InternalServiceFactory>::create
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-server-1.0.1/src/service.rs:148
      18: <alloc::boxed::Box<dyn actix_server::service::InternalServiceFactory> as actix_server::service::InternalServiceFactory>::create
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-server-1.0.1/src/service.rs:170
      19: actix_server::worker::Worker::start::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-server-1.0.1/src/worker.rs:189
      20: <std::future::GenFuture<T> as core::future::future::Future>::poll
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/future.rs:43
      21: <core::pin::Pin<P> as core::future::future::Future>::poll
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libcore/future/future.rs:119
      22: <alloc::boxed::Box<F> as core::future::future::Future>::poll
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/liballoc/boxed.rs:1131
      23: tokio::task::core::Core<T>::poll
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/core.rs:128
      24: tokio::task::harness::Harness<T,S>::poll::{{closure}}::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/harness.rs:120
      25: core::ops::function::FnOnce::call_once
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libcore/ops/function.rs:232
      26: <std::panic::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/panic.rs:318
      27: std::panicking::try::do_call
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/panicking.rs:305
      28: __rust_maybe_catch_panic
                 at src/libpanic_unwind/lib.rs:86
      29: std::panicking::try
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/panicking.rs:281
      30: std::panic::catch_unwind
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/panic.rs:394
      31: tokio::task::harness::Harness<T,S>::poll::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/harness.rs:101
      32: tokio::loom::std::causal_cell::CausalCell<T>::with_mut
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/loom/std/causal_cell.rs:41
      33: tokio::task::harness::Harness<T,S>::poll
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/harness.rs:100
      34: tokio::task::raw::poll
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/raw.rs:162
      35: tokio::task::raw::RawTask::poll
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/raw.rs:113
      36: tokio::task::Task<S>::run
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/mod.rs:381
      37: tokio::task::local::Scheduler::tick
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:513
      38: <tokio::task::local::LocalFuture<F> as core::future::future::Future>::poll::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:407
      39: tokio::task::local::Scheduler::with::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:478
      40: std::thread::local::LocalKey<T>::try_with
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/thread/local.rs:262
      41: std::thread::local::LocalKey<T>::with
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/thread/local.rs:239
      42: tokio::task::local::Scheduler::with
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:474
      43: <tokio::task::local::LocalFuture<F> as core::future::future::Future>::poll
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:402
      44: std::future::poll_with_tls_context
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/future.rs:98
      45: tokio::task::local::LocalSet::run_until::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:358
      46: <std::future::GenFuture<T> as core::future::future::Future>::poll
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/future.rs:43
      47: tokio::runtime::basic_scheduler::BasicScheduler<P>::block_on
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/runtime/basic_scheduler.rs:138
      48: tokio::runtime::Runtime::block_on::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/runtime/mod.rs:411
      49: tokio::runtime::context::enter
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/runtime/context.rs:72
      50: tokio::runtime::handle::Handle::enter
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/runtime/handle.rs:34
      51: tokio::runtime::Runtime::block_on
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/runtime/mod.rs:408
      52: tokio::task::local::LocalSet::block_on
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:321
      53: actix_rt::runtime::Runtime::block_on
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-rt-1.0.0/src/runtime.rs:89
      54: actix_rt::arbiter::Arbiter::new::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-rt-1.0.0/src/arbiter.rs:125
    note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
    thread 'actix-rt:worker:3' panicked at 'called `Result::unwrap()` on an `Err` value: "PoisonError { inner: .. }"', /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-web-2.0.0/src/server.rs:250:25
    stack backtrace:
       0: backtrace::backtrace::libunwind::trace
                 at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.40/src/backtrace/libunwind.rs:88
       1: backtrace::backtrace::trace_unsynchronized
                 at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.40/src/backtrace/mod.rs:66
       2: std::sys_common::backtrace::_print_fmt
                 at src/libstd/sys_common/backtrace.rs:77
       3: <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt
                 at src/libstd/sys_common/backtrace.rs:59
       4: core::fmt::write
                 at src/libcore/fmt/mod.rs:1052
       5: std::io::Write::write_fmt
                 at src/libstd/io/mod.rs:1426
       6: std::sys_common::backtrace::_print
                 at src/libstd/sys_common/backtrace.rs:62
       7: std::sys_common::backtrace::print
                 at src/libstd/sys_common/backtrace.rs:49
       8: std::panicking::default_hook::{{closure}}
                 at src/libstd/panicking.rs:204
       9: std::panicking::default_hook
                 at src/libstd/panicking.rs:224
      10: std::panicking::rust_panic_with_hook
                 at src/libstd/panicking.rs:472
      11: rust_begin_unwind
                 at src/libstd/panicking.rs:380
      12: core::panicking::panic_fmt
                 at src/libcore/panicking.rs:85
      13: core::option::expect_none_failed
                 at src/libcore/option.rs:1199
      14: core::result::Result<T,E>::unwrap
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libcore/result.rs:963
      15: actix_web::server::HttpServer<F,I,S,B>::listen::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-web-2.0.0/src/server.rs:250
      16: <F as actix_server::service::ServiceFactory<I>>::create
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-server-1.0.1/src/service.rs:183
      17: <actix_server::service::StreamNewService<F,Io> as actix_server::service::InternalServiceFactory>::create
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-server-1.0.1/src/service.rs:148
      18: <alloc::boxed::Box<dyn actix_server::service::InternalServiceFactory> as actix_server::service::InternalServiceFactory>::create
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-server-1.0.1/src/service.rs:170
      19: actix_server::worker::Worker::start::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-server-1.0.1/src/worker.rs:189
      20: <std::future::GenFuture<T> as core::future::future::Future>::poll
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/future.rs:43
      21: <core::pin::Pin<P> as core::future::future::Future>::poll
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libcore/future/future.rs:119
      22: <alloc::boxed::Box<F> as core::future::future::Future>::poll
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/liballoc/boxed.rs:1131
      23: tokio::task::core::Core<T>::poll
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/core.rs:128
      24: tokio::task::harness::Harness<T,S>::poll::{{closure}}::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/harness.rs:120
      25: core::ops::function::FnOnce::call_once
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libcore/ops/function.rs:232
      26: <std::panic::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/panic.rs:318
      27: std::panicking::try::do_call
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/panicking.rs:305
      28: __rust_maybe_catch_panic
                 at src/libpanic_unwind/lib.rs:86
      29: std::panicking::try
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/panicking.rs:281
      30: std::panic::catch_unwind
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/panic.rs:394
      31: tokio::task::harness::Harness<T,S>::poll::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/harness.rs:101
      32: tokio::loom::std::causal_cell::CausalCell<T>::with_mut
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/loom/std/causal_cell.rs:41
      33: tokio::task::harness::Harness<T,S>::poll
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/harness.rs:100
      34: tokio::task::raw::poll
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/raw.rs:162
      35: tokio::task::raw::RawTask::poll
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/raw.rs:113
      36: tokio::task::Task<S>::run
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/mod.rs:381
      37: tokio::task::local::Scheduler::tick
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:513
      38: <tokio::task::local::LocalFuture<F> as core::future::future::Future>::poll::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:407
      39: tokio::task::local::Scheduler::with::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:478
      40: std::thread::local::LocalKey<T>::try_with
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/thread/local.rs:262
      41: std::thread::local::LocalKey<T>::with
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/thread/local.rs:239
      42: tokio::task::local::Scheduler::with
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:474
      43: <tokio::task::local::LocalFuture<F> as core::future::future::Future>::poll
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:402
      44: std::future::poll_with_tls_context
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/future.rs:98
      45: tokio::task::local::LocalSet::run_until::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:358
      46: <std::future::GenFuture<T> as core::future::future::Future>::poll
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/future.rs:43
      47: tokio::runtime::basic_scheduler::BasicScheduler<P>::block_on
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/runtime/basic_scheduler.rs:138
      48: tokio::runtime::Runtime::block_on::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/runtime/mod.rs:411
      49: tokio::runtime::context::enter
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/runtime/context.rs:72
      50: tokio::runtime::handle::Handle::enter
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/runtime/handle.rs:34
      51: tokio::runtime::Runtime::block_on
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/runtime/mod.rs:408
      52: tokio::task::local::LocalSet::block_on
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:321
      53: actix_rt::runtime::Runtime::block_on
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-rt-1.0.0/src/runtime.rs:89
      54: actix_rt::arbiter::Arbiter::new::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-rt-1.0.0/src/arbiter.rs:125
    note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
    thread 'actix-rt:worker:4' panicked at 'called `Result::unwrap()` on an `Err` value: "PoisonError { inner: .. }"', /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-web-2.0.0/src/server.rs:250:25
    stack backtrace:
       0: backtrace::backtrace::libunwind::trace
                 at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.40/src/backtrace/libunwind.rs:88
       1: backtrace::backtrace::trace_unsynchronized
                 at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.40/src/backtrace/mod.rs:66
       2: std::sys_common::backtrace::_print_fmt
                 at src/libstd/sys_common/backtrace.rs:77
       3: <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt
                 at src/libstd/sys_common/backtrace.rs:59
       4: core::fmt::write
                 at src/libcore/fmt/mod.rs:1052
       5: std::io::Write::write_fmt
                 at src/libstd/io/mod.rs:1426
       6: std::sys_common::backtrace::_print
                 at src/libstd/sys_common/backtrace.rs:62
       7: std::sys_common::backtrace::print
                 at src/libstd/sys_common/backtrace.rs:49
       8: std::panicking::default_hook::{{closure}}
                 at src/libstd/panicking.rs:204
       9: std::panicking::default_hook
                 at src/libstd/panicking.rs:224
      10: std::panicking::rust_panic_with_hook
                 at src/libstd/panicking.rs:472
      11: rust_begin_unwind
                 at src/libstd/panicking.rs:380
      12: core::panicking::panic_fmt
                 at src/libcore/panicking.rs:85
      13: core::option::expect_none_failed
                 at src/libcore/option.rs:1199
      14: core::result::Result<T,E>::unwrap
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libcore/result.rs:963
      15: actix_web::server::HttpServer<F,I,S,B>::listen::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-web-2.0.0/src/server.rs:250
      16: <F as actix_server::service::ServiceFactory<I>>::create
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-server-1.0.1/src/service.rs:183
      17: <actix_server::service::StreamNewService<F,Io> as actix_server::service::InternalServiceFactory>::create
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-server-1.0.1/src/service.rs:148
      18: <alloc::boxed::Box<dyn actix_server::service::InternalServiceFactory> as actix_server::service::InternalServiceFactory>::create
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-server-1.0.1/src/service.rs:170
      19: actix_server::worker::Worker::start::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-server-1.0.1/src/worker.rs:189
      20: <std::future::GenFuture<T> as core::future::future::Future>::poll
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/future.rs:43
      21: <core::pin::Pin<P> as core::future::future::Future>::poll
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libcore/future/future.rs:119
      22: <alloc::boxed::Box<F> as core::future::future::Future>::poll
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/liballoc/boxed.rs:1131
      23: tokio::task::core::Core<T>::poll
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/core.rs:128
      24: tokio::task::harness::Harness<T,S>::poll::{{closure}}::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/harness.rs:120
      25: core::ops::function::FnOnce::call_once
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libcore/ops/function.rs:232
      26: <std::panic::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/panic.rs:318
      27: std::panicking::try::do_call
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/panicking.rs:305
      28: __rust_maybe_catch_panic
                 at src/libpanic_unwind/lib.rs:86
      29: std::panicking::try
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/panicking.rs:281
      30: std::panic::catch_unwind
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/panic.rs:394
      31: tokio::task::harness::Harness<T,S>::poll::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/harness.rs:101
      32: tokio::loom::std::causal_cell::CausalCell<T>::with_mut
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/loom/std/causal_cell.rs:41
      33: tokio::task::harness::Harness<T,S>::poll
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/harness.rs:100
      34: tokio::task::raw::poll
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/raw.rs:162
      35: tokio::task::raw::RawTask::poll
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/raw.rs:113
      36: tokio::task::Task<S>::run
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/mod.rs:381
      37: tokio::task::local::Scheduler::tick
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:513
      38: <tokio::task::local::LocalFuture<F> as core::future::future::Future>::poll::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:407
      39: tokio::task::local::Scheduler::with::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:478
      40: std::thread::local::LocalKey<T>::try_with
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/thread/local.rs:262
      41: std::thread::local::LocalKey<T>::with
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/thread/local.rs:239
      42: tokio::task::local::Scheduler::with
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:474
      43: <tokio::task::local::LocalFuture<F> as core::future::future::Future>::poll
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:402
      44: std::future::poll_with_tls_context
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/future.rs:98
      45: tokio::task::local::LocalSet::run_until::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:358
      46: <std::future::GenFuture<T> as core::future::future::Future>::poll
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/future.rs:43
      47: tokio::runtime::basic_scheduler::BasicScheduler<P>::block_on
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/runtime/basic_scheduler.rs:138
      48: tokio::runtime::Runtime::block_on::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/runtime/mod.rs:411
      49: tokio::runtime::context::enter
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/runtime/context.rs:72
      50: tokio::runtime::handle::Handle::enter
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/runtime/handle.rs:34
      51: tokio::runtime::Runtime::block_on
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/runtime/mod.rs:408
      52: tokio::task::local::LocalSet::block_on
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:321
      53: actix_rt::runtime::Runtime::block_on
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-rt-1.0.0/src/runtime.rs:89
      54: actix_rt::arbiter::Arbiter::new::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-rt-1.0.0/src/arbiter.rs:125
    note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
    thread 'actix-rt:worker:5' panicked at 'called `Result::unwrap()` on an `Err` value: "PoisonError { inner: .. }"', /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-web-2.0.0/src/server.rs:250:25
    stack backtrace:
       0: backtrace::backtrace::libunwind::trace
                 at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.40/src/backtrace/libunwind.rs:88
       1: backtrace::backtrace::trace_unsynchronized
                 at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.40/src/backtrace/mod.rs:66
       2: std::sys_common::backtrace::_print_fmt
                 at src/libstd/sys_common/backtrace.rs:77
       3: <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt
                 at src/libstd/sys_common/backtrace.rs:59
       4: core::fmt::write
                 at src/libcore/fmt/mod.rs:1052
       5: std::io::Write::write_fmt
                 at src/libstd/io/mod.rs:1426
       6: std::sys_common::backtrace::_print
                 at src/libstd/sys_common/backtrace.rs:62
       7: std::sys_common::backtrace::print
                 at src/libstd/sys_common/backtrace.rs:49
       8: std::panicking::default_hook::{{closure}}
                 at src/libstd/panicking.rs:204
       9: std::panicking::default_hook
                 at src/libstd/panicking.rs:224
      10: std::panicking::rust_panic_with_hook
                 at src/libstd/panicking.rs:472
      11: rust_begin_unwind
                 at src/libstd/panicking.rs:380
      12: core::panicking::panic_fmt
                 at src/libcore/panicking.rs:85
      13: core::option::expect_none_failed
                 at src/libcore/option.rs:1199
      14: core::result::Result<T,E>::unwrap
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libcore/result.rs:963
      15: actix_web::server::HttpServer<F,I,S,B>::listen::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-web-2.0.0/src/server.rs:250
      16: <F as actix_server::service::ServiceFactory<I>>::create
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-server-1.0.1/src/service.rs:183
      17: <actix_server::service::StreamNewService<F,Io> as actix_server::service::InternalServiceFactory>::create
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-server-1.0.1/src/service.rs:148
      18: <alloc::boxed::Box<dyn actix_server::service::InternalServiceFactory> as actix_server::service::InternalServiceFactory>::create
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-server-1.0.1/src/service.rs:170
      19: actix_server::worker::Worker::start::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-server-1.0.1/src/worker.rs:189
      20: <std::future::GenFuture<T> as core::future::future::Future>::poll
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/future.rs:43
      21: <core::pin::Pin<P> as core::future::future::Future>::poll
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libcore/future/future.rs:119
      22: <alloc::boxed::Box<F> as core::future::future::Future>::poll
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/liballoc/boxed.rs:1131
      23: tokio::task::core::Core<T>::poll
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/core.rs:128
      24: tokio::task::harness::Harness<T,S>::poll::{{closure}}::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/harness.rs:120
      25: core::ops::function::FnOnce::call_once
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libcore/ops/function.rs:232
      26: <std::panic::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/panic.rs:318
      27: std::panicking::try::do_call
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/panicking.rs:305
      28: __rust_maybe_catch_panic
                 at src/libpanic_unwind/lib.rs:86
      29: std::panicking::try
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/panicking.rs:281
      30: std::panic::catch_unwind
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/panic.rs:394
      31: tokio::task::harness::Harness<T,S>::poll::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/harness.rs:101
      32: tokio::loom::std::causal_cell::CausalCell<T>::with_mut
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/loom/std/causal_cell.rs:41
      33: tokio::task::harness::Harness<T,S>::poll
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/harness.rs:100
      34: tokio::task::raw::poll
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/raw.rs:162
      35: tokio::task::raw::RawTask::poll
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/raw.rs:113
      36: tokio::task::Task<S>::run
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/mod.rs:381
      37: tokio::task::local::Scheduler::tick
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:513
      38: <tokio::task::local::LocalFuture<F> as core::future::future::Future>::poll::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:407
      39: tokio::task::local::Scheduler::with::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:478
      40: std::thread::local::LocalKey<T>::try_with
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/thread/local.rs:262
      41: std::thread::local::LocalKey<T>::with
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/thread/local.rs:239
      42: tokio::task::local::Scheduler::with
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:474
      43: <tokio::task::local::LocalFuture<F> as core::future::future::Future>::poll
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:402
      44: std::future::poll_with_tls_context
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/future.rs:98
      45: tokio::task::local::LocalSet::run_until::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:358
      46: <std::future::GenFuture<T> as core::future::future::Future>::poll
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/future.rs:43
      47: tokio::runtime::basic_scheduler::BasicScheduler<P>::block_on
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/runtime/basic_scheduler.rs:138
      48: tokio::runtime::Runtime::block_on::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/runtime/mod.rs:411
      49: tokio::runtime::context::enter
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/runtime/context.rs:72
      50: tokio::runtime::handle::Handle::enter
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/runtime/handle.rs:34
      51: tokio::runtime::Runtime::block_on
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/runtime/mod.rs:408
      52: tokio::task::local::LocalSet::block_on
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:321
      53: actix_rt::runtime::Runtime::block_on
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-rt-1.0.0/src/runtime.rs:89
      54: actix_rt::arbiter::Arbiter::new::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-rt-1.0.0/src/arbiter.rs:125
    note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
    thread 'actix-rt:worker:6' panicked at 'called `Result::unwrap()` on an `Err` value: "PoisonError { inner: .. }"', /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-web-2.0.0/src/server.rs:250:25
    stack backtrace:
       0: backtrace::backtrace::libunwind::trace
                 at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.40/src/backtrace/libunwind.rs:88
       1: backtrace::backtrace::trace_unsynchronized
                 at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.40/src/backtrace/mod.rs:66
       2: std::sys_common::backtrace::_print_fmt
                 at src/libstd/sys_common/backtrace.rs:77
       3: <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt
                 at src/libstd/sys_common/backtrace.rs:59
       4: core::fmt::write
                 at src/libcore/fmt/mod.rs:1052
       5: std::io::Write::write_fmt
                 at src/libstd/io/mod.rs:1426
       6: std::sys_common::backtrace::_print
                 at src/libstd/sys_common/backtrace.rs:62
       7: std::sys_common::backtrace::print
                 at src/libstd/sys_common/backtrace.rs:49
       8: std::panicking::default_hook::{{closure}}
                 at src/libstd/panicking.rs:204
       9: std::panicking::default_hook
                 at src/libstd/panicking.rs:224
      10: std::panicking::rust_panic_with_hook
                 at src/libstd/panicking.rs:472
      11: rust_begin_unwind
                 at src/libstd/panicking.rs:380
      12: core::panicking::panic_fmt
                 at src/libcore/panicking.rs:85
      13: core::option::expect_none_failed
                 at src/libcore/option.rs:1199
      14: core::result::Result<T,E>::unwrap
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libcore/result.rs:963
      15: actix_web::server::HttpServer<F,I,S,B>::listen::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-web-2.0.0/src/server.rs:250
      16: <F as actix_server::service::ServiceFactory<I>>::create
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-server-1.0.1/src/service.rs:183
      17: <actix_server::service::StreamNewService<F,Io> as actix_server::service::InternalServiceFactory>::create
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-server-1.0.1/src/service.rs:148
      18: <alloc::boxed::Box<dyn actix_server::service::InternalServiceFactory> as actix_server::service::InternalServiceFactory>::create
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-server-1.0.1/src/service.rs:170
      19: actix_server::worker::Worker::start::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-server-1.0.1/src/worker.rs:189
      20: <std::future::GenFuture<T> as core::future::future::Future>::poll
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/future.rs:43
      21: <core::pin::Pin<P> as core::future::future::Future>::poll
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libcore/future/future.rs:119
      22: <alloc::boxed::Box<F> as core::future::future::Future>::poll
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/liballoc/boxed.rs:1131
      23: tokio::task::core::Core<T>::poll
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/core.rs:128
      24: tokio::task::harness::Harness<T,S>::poll::{{closure}}::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/harness.rs:120
      25: core::ops::function::FnOnce::call_once
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libcore/ops/function.rs:232
      26: <std::panic::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/panic.rs:318
      27: std::panicking::try::do_call
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/panicking.rs:305
      28: __rust_maybe_catch_panic
                 at src/libpanic_unwind/lib.rs:86
      29: std::panicking::try
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/panicking.rs:281
      30: std::panic::catch_unwind
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/panic.rs:394
      31: tokio::task::harness::Harness<T,S>::poll::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/harness.rs:101
      32: tokio::loom::std::causal_cell::CausalCell<T>::with_mut
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/loom/std/causal_cell.rs:41
      33: tokio::task::harness::Harness<T,S>::poll
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/harness.rs:100
      34: tokio::task::raw::poll
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/raw.rs:162
      35: tokio::task::raw::RawTask::poll
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/raw.rs:113
      36: tokio::task::Task<S>::run
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/mod.rs:381
      37: tokio::task::local::Scheduler::tick
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:513
      38: <tokio::task::local::LocalFuture<F> as core::future::future::Future>::poll::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:407
      39: tokio::task::local::Scheduler::with::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:478
      40: std::thread::local::LocalKey<T>::try_with
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/thread/local.rs:262
      41: std::thread::local::LocalKey<T>::with
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/thread/local.rs:239
      42: tokio::task::local::Scheduler::with
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:474
      43: <tokio::task::local::LocalFuture<F> as core::future::future::Future>::poll
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:402
      44: std::future::poll_with_tls_context
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/future.rs:98
      45: tokio::task::local::LocalSet::run_until::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:358
      46: <std::future::GenFuture<T> as core::future::future::Future>::poll
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/future.rs:43
      47: tokio::runtime::basic_scheduler::BasicScheduler<P>::block_on
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/runtime/basic_scheduler.rs:138
      48: tokio::runtime::Runtime::block_on::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/runtime/mod.rs:411
      49: tokio::runtime::context::enter
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/runtime/context.rs:72
      50: tokio::runtime::handle::Handle::enter
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/runtime/handle.rs:34
      51: tokio::runtime::Runtime::block_on
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/runtime/mod.rs:408
      52: tokio::task::local::LocalSet::block_on
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:321
      53: actix_rt::runtime::Runtime::block_on
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-rt-1.0.0/src/runtime.rs:89
      54: actix_rt::arbiter::Arbiter::new::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-rt-1.0.0/src/arbiter.rs:125
    note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
    thread 'actix-rt:worker:7' panicked at 'called `Result::unwrap()` on an `Err` value: "PoisonError { inner: .. }"', /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-web-2.0.0/src/server.rs:250:25
    stack backtrace:
       0: backtrace::backtrace::libunwind::trace
                 at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.40/src/backtrace/libunwind.rs:88
       1: backtrace::backtrace::trace_unsynchronized
                 at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.40/src/backtrace/mod.rs:66
       2: std::sys_common::backtrace::_print_fmt
                 at src/libstd/sys_common/backtrace.rs:77
       3: <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt
                 at src/libstd/sys_common/backtrace.rs:59
       4: core::fmt::write
                 at src/libcore/fmt/mod.rs:1052
       5: std::io::Write::write_fmt
                 at src/libstd/io/mod.rs:1426
       6: std::sys_common::backtrace::_print
                 at src/libstd/sys_common/backtrace.rs:62
       7: std::sys_common::backtrace::print
                 at src/libstd/sys_common/backtrace.rs:49
       8: std::panicking::default_hook::{{closure}}
                 at src/libstd/panicking.rs:204
       9: std::panicking::default_hook
                 at src/libstd/panicking.rs:224
      10: std::panicking::rust_panic_with_hook
                 at src/libstd/panicking.rs:472
      11: rust_begin_unwind
                 at src/libstd/panicking.rs:380
      12: core::panicking::panic_fmt
                 at src/libcore/panicking.rs:85
      13: core::option::expect_none_failed
                 at src/libcore/option.rs:1199
      14: core::result::Result<T,E>::unwrap
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libcore/result.rs:963
      15: actix_web::server::HttpServer<F,I,S,B>::listen::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-web-2.0.0/src/server.rs:250
      16: <F as actix_server::service::ServiceFactory<I>>::create
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-server-1.0.1/src/service.rs:183
      17: <actix_server::service::StreamNewService<F,Io> as actix_server::service::InternalServiceFactory>::create
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-server-1.0.1/src/service.rs:148
      18: <alloc::boxed::Box<dyn actix_server::service::InternalServiceFactory> as actix_server::service::InternalServiceFactory>::create
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-server-1.0.1/src/service.rs:170
      19: actix_server::worker::Worker::start::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-server-1.0.1/src/worker.rs:189
      20: <std::future::GenFuture<T> as core::future::future::Future>::poll
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/future.rs:43
      21: <core::pin::Pin<P> as core::future::future::Future>::poll
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libcore/future/future.rs:119
      22: <alloc::boxed::Box<F> as core::future::future::Future>::poll
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/liballoc/boxed.rs:1131
      23: tokio::task::core::Core<T>::poll
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/core.rs:128
      24: tokio::task::harness::Harness<T,S>::poll::{{closure}}::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/harness.rs:120
      25: core::ops::function::FnOnce::call_once
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libcore/ops/function.rs:232
      26: <std::panic::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/panic.rs:318
      27: std::panicking::try::do_call
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/panicking.rs:305
      28: __rust_maybe_catch_panic
                 at src/libpanic_unwind/lib.rs:86
      29: std::panicking::try
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/panicking.rs:281
      30: std::panic::catch_unwind
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/panic.rs:394
      31: tokio::task::harness::Harness<T,S>::poll::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/harness.rs:101
      32: tokio::loom::std::causal_cell::CausalCell<T>::with_mut
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/loom/std/causal_cell.rs:41
      33: tokio::task::harness::Harness<T,S>::poll
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/harness.rs:100
      34: tokio::task::raw::poll
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/raw.rs:162
      35: tokio::task::raw::RawTask::poll
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/raw.rs:113
      36: tokio::task::Task<S>::run
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/mod.rs:381
      37: tokio::task::local::Scheduler::tick
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:513
      38: <tokio::task::local::LocalFuture<F> as core::future::future::Future>::poll::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:407
      39: tokio::task::local::Scheduler::with::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:478
      40: std::thread::local::LocalKey<T>::try_with
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/thread/local.rs:262
      41: std::thread::local::LocalKey<T>::with
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/thread/local.rs:239
      42: tokio::task::local::Scheduler::with
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:474
      43: <tokio::task::local::LocalFuture<F> as core::future::future::Future>::poll
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:402
      44: std::future::poll_with_tls_context
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/future.rs:98
      45: tokio::task::local::LocalSet::run_until::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:358
      46: <std::future::GenFuture<T> as core::future::future::Future>::poll
                 at /rustc/b8cedc00407a4c56a3bda1ed605c6fc166655447/src/libstd/future.rs:43
      47: tokio::runtime::basic_scheduler::BasicScheduler<P>::block_on
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/runtime/basic_scheduler.rs:138
      48: tokio::runtime::Runtime::block_on::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/runtime/mod.rs:411
      49: tokio::runtime::context::enter
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/runtime/context.rs:72
      50: tokio::runtime::handle::Handle::enter
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/runtime/handle.rs:34
      51: tokio::runtime::Runtime::block_on
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/runtime/mod.rs:408
      52: tokio::task::local::LocalSet::block_on
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-0.2.11/src/task/local.rs:321
      53: actix_rt::runtime::Runtime::block_on
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-rt-1.0.0/src/runtime.rs:89
      54: actix_rt::arbiter::Arbiter::new::{{closure}}
                 at /home/flyq/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-rt-1.0.0/src/arbiter.rs:125
    note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
    ^C[2020-04-08T02:52:30Z INFO  actix_server::builder] SIGINT received, exiting
    
    opened by flyq 1
Owner
David D.
David D.
Add Facebook and Google authentication to your HTTP REST API in Actix-web

I created this project while learning Rust. Project shows how to handle Facebook and Google token verification in Rust using Actix-Web. Hope this help

null 37 Dec 31, 2022
Basic Actix + Diesel + Postgres REST API

Actix-Crud Basic Actix + Diesel + Postgres REST API Setup Install and setup PostgreSQL Set DATABASE_URL environment variable or specify in .env file g

Aathif Naseer 4 Sep 23, 2022
Example Blog using Rust, Actix Web, HTMX, Mustache

Actix Blog An example blog built with Actix. It uses htmx and handlebar templates. Running To run the blog, you need to have a recent version of Rust

Dru Jensen 2 Nov 11, 2022
Example Rust application for Heroku

Example application: Rust, Actix & Heroku Rust is a language suitable for high-peformance, reliable web services. Actix is a popular Rust web framewor

Eric Kidd 36 Oct 6, 2022
Actix Web is a powerful, pragmatic, and extremely fast web framework for Rust.

Actix Web Actix Web is a powerful, pragmatic, and extremely fast web framework for Rust Features Supports HTTP/1.x and HTTP/2 Streaming and pipelining

Actix 16.3k Jan 8, 2023
A starter template for actix-web projects that feels very Django-esque. Avoid the boring stuff and move faster.

Jelly A.K.A, the actix-web starter you probably wish you had. This is provided as-is, and anyone is free to extend it or rework it as they desire - ju

SecretKeys 198 Dec 15, 2022
Extension for actix-web to validate user permissions

actix-web-grants Extension for actix-web to validate user permissions. To check user access to specific services, you can use built-in proc-macro, Per

Artem Medvedev 114 Dec 22, 2022
In-progress extractors and middleware for Actix Web

actix-web-lab Experimental extractors, middleware, and other extras for possible inclusion in Actix Web. Things To Know About This Crate It will never

Rob Ede 51 Dec 20, 2022
Easy to use multipart forms for actix-web

Actix Easy Multipart Easy to use Multipart Forms for actix-web. File uploads are written to disk as temporary files similar to the way the $_FILES var

Jacob Halsey 17 Jan 3, 2023
Cookiecutter Rust Actix template for jumpstarting production-ready projects quickly.

Cookiecutter actix simple clean architecture This is a reusable Rust Cookiecutter template. The project is based on Actix web in combination with Dies

Microsoft 19 Feb 12, 2023
Actix-web wrapper for garde, a Rust validation library.

Garde-actix-web   Actix-web wrapper for garde, a Rust validation library. Installation Usage example Feature flags About us Installation [dependencies

Netwo 5 Sep 8, 2023
Fahrenheit-celsius converter using actix

fahrenheit-celsius-converter Simple http Fahrenheit/Celsius/Kelvin converter using actix-web. Note This is a toy project, not yet finished. It's not r

null 5 Nov 7, 2023
REST-like API micro-framework for Rust. Works with Iron.

Table of Contents What is Rustless? Usage warning Basic Usage Complex example Mounting Parameters validation and coercion Use JSON Schema Query string

Rustless 610 Jan 4, 2023
The purpose of this example is to provide details as to how one would go about using GraphQL with the Rust Language.

Zero to GraphQL Using Rust The purpose of this example is to provide details as to how one would go about using GraphQL with the Rust Language. Thus,

Conrad Taylor 1 Jan 7, 2022
A web application completely written in Rust. 🌍

WebApp.rs A web application completely written in Rust Target of this project is to write a complete web application including backend and frontend wi

Sascha Grunert 2.1k Dec 30, 2022
Actix-extras - A collection of additional crates supporting the actix and actix-web frameworks.

actix-extras A collection of additional crates supporting the actix-web and actix frameworks. Crates by @actix Crate actix-cors Cross-origin resource

Actix 506 Dec 27, 2022
📺 Netflix in Rust/ React-TS/ NextJS, Actix-Web, Async Apollo-GraphQl, Cassandra/ ScyllaDB, Async SQLx, Kafka, Redis, Tokio, Actix, Elasticsearch, Influxdb Iox, Tensorflow, AWS

Fullstack Movie Streaming Platform ?? Netflix in RUST/ NextJS, Actix-Web, Async Apollo-GraphQl, Cassandra/ ScyllaDB, Async SQLx, Spark, Kafka, Redis,

null 34 Apr 17, 2023
Add Facebook and Google authentication to your HTTP REST API in Actix-web

I created this project while learning Rust. Project shows how to handle Facebook and Google token verification in Rust using Actix-Web. Hope this help

null 37 Dec 31, 2022
Basic Actix + Diesel + Postgres REST API

Actix-Crud Basic Actix + Diesel + Postgres REST API Setup Install and setup PostgreSQL Set DATABASE_URL environment variable or specify in .env file g

Aathif Naseer 4 Sep 23, 2022
An example of a fairing for rocket to use tracing (as this pops up at many places in dicussions and questions)

Rocket Tracing Fairing Example This repository aims to give a short example of how you can add a Fairing to your Rocket for tracing and how to use it

Christof Weickhardt 9 Nov 23, 2022