Git Product home page Git Product logo

microservice-rust-mysql's Introduction

Secure & lightweight microservice with a database backend

In this repo, we demonstrate a microservice written in Rust, and connected to a MySQL database. It supports CRUD operations on a database table via a HTTP service interface. The microservice is compiled into WebAssembly (Wasm) and runs in the WasmEdge Runtime, which is a secure and lightweight alternative to natively compiled Rust apps in Linux containers. The WasmEdge Runtime can be managed and orchestrated by container tools such as the Docker, Podman, as well as almost all flavors of Kubernetes. It also works with microservice management frameworks such as Dapr. Checkout this article or this video to learn how the Rust code in this microservice works.

Quickstart with Docker

The easiest way to get started is to use a version of Docker Desktop or Docker CLI with Wasm support.

Then, you just need to type one command.

export BUILDX_NO_DEFAULT_ATTESTATIONS=1
docker compose up

This will build the Rust source code, run the Wasm server, and startup a MySQL backing database. It also starts a basic STATIC web interface (available at http://localhost:8090). See the Dockerfile and docker-compose.yml files. You can jump directly to the CRUD tests section to interact with the web service.

However, if you want to build and run the microservice app step by step on your own system. Follow the detailed instructions below.

Prerequisites

On Linux, you can use the following commands to install Rust and WasmEdge.

# Install Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env
# Install WebAssembly target for Rust
rustup target add wasm32-wasi

# Install WasmEdge
curl -sSf https://raw.githubusercontent.com/WasmEdge/WasmEdge/master/utils/install.sh | bash -s -- -e all
source $HOME/.wasmedge/env

Build

Use the following command to build the microservice. A WebAssembly bytecode file (wasm file) will be created.

cargo build --target wasm32-wasi --release

You can run the AOT compiler on the wasm file. It could significantly improvement the performance of compute-intensive applications. This microservice, however, is a network intensitive application. Our use of async HTTP networking (Tokio and hyper) and async MySQL connectors are crucial for the performance of this microservice.

wasmedgec target/wasm32-wasi/release/order_demo_service.wasm order_demo_service.wasm

Run

You can use the wasmedge command to run the wasm application. It will start the server. Make sure that you pass the MySQL connection string as the env variable to the command.

wasmedge --env "DATABASE_URL=mysql://user:[email protected]:3306/mysql" order_demo_service.wasm

CRUD tests

Open another terminal, and you can use the curl command to interact with the web service.

When the microservice receives a GET request to the /init endpoint, it would initialize the database with the orders table.

curl http://localhost:8080/init

When the microservice receives a POST request to the /create_order endpoint, it would extract the JSON data from the POST body and insert an Order record into the database table. For multiple records, use the /create_orders endpoint and POST a JSON array of Order objects.

curl http://localhost:8080/create_orders -X POST -d @orders.json

When the microservice receives a GET request to the /orders endpoint, it would get all rows from the orders table and return the result set in a JSON array in the HTTP response.

curl http://localhost:8080/orders

When the microservice receives a POST request to the /update_order endpoint, it would extract the JSON data from the POST body and update the Order record in the database table that matches the order_id in the input data.

curl http://localhost:8080/update_order -X POST -d @update_order.json

When the microservice receives a GET request to the /delete_order endpoint, it would delete the row in the orders table that matches the id GET parameter.

curl http://localhost:8080/delete_order?id=2

That's it. Feel free to fork this project and use it as a template for your own lightweight microservices!

microservice-rust-mysql's People

Contributors

aalonsolopez avatar anonymousamalgrams avatar aslom avatar chris-crone avatar hydai avatar jprendes avatar juntao avatar l-jasmine avatar mikesir87 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

microservice-rust-mysql's Issues

Compile error in MacOS Big Sur 11.6.8

First i compile it with command:

cargo build --target wasm32-wasi --release                                     

And the the following error:

   Compiling libz-sys v1.1.8
The following warnings were emitted during compilation:

warning: error: unable to create target: 'No available targets are compatible with triple "wasm32-unknown-wasi"'
warning: 1 error generated.

error: failed to run custom build command for `libz-sys v1.1.8`

Caused by:
  process didn't exit successfully: `/Users/zhouyou/2022/wasm/microservice-rust-mysql/target/release/build/libz-sys-45ae25f1c18a6a06/build-script-build` (exit status: 1)
  --- stdout
  cargo:rerun-if-env-changed=LIBZ_SYS_STATIC
  cargo:rerun-if-changed=build.rs
  cargo:rerun-if-env-changed=ZLIB_NO_PKG_CONFIG
  cargo:rerun-if-env-changed=PKG_CONFIG_ALLOW_CROSS_wasm32-wasi
  cargo:rerun-if-env-changed=PKG_CONFIG_ALLOW_CROSS_wasm32_wasi
  cargo:rerun-if-env-changed=TARGET_PKG_CONFIG_ALLOW_CROSS
  cargo:rerun-if-env-changed=PKG_CONFIG_ALLOW_CROSS
  cargo:rerun-if-env-changed=PKG_CONFIG_wasm32-wasi
  cargo:rerun-if-env-changed=PKG_CONFIG_wasm32_wasi
  cargo:rerun-if-env-changed=TARGET_PKG_CONFIG
  cargo:rerun-if-env-changed=PKG_CONFIG
  cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR_wasm32-wasi
  cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR_wasm32_wasi
  cargo:rerun-if-env-changed=TARGET_PKG_CONFIG_SYSROOT_DIR
  cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR
  cargo-warning=pkg-config has not been configured to support cross-compilation.

  Install a sysroot for the target platform and configure it via
  PKG_CONFIG_SYSROOT_DIR and PKG_CONFIG_PATH, or install a
  cross-compiling wrapper for pkg-config and set it via
  PKG_CONFIG environment variable.
  TARGET = Some("wasm32-wasi")
  OPT_LEVEL = Some("3")
  HOST = Some("x86_64-apple-darwin")
  CC_wasm32-wasi = None
  CC_wasm32_wasi = None
  TARGET_CC = None
  CC = None
  CFLAGS_wasm32-wasi = None
  CFLAGS_wasm32_wasi = None
  TARGET_CFLAGS = None
  CFLAGS = None
  CRATE_CC_NO_DEFAULTS = None
  DEBUG = Some("false")
  running: "clang" "-O3" "-ffunction-sections" "-fdata-sections" "-fPIC" "--target=wasm32-wasi" "-I" "src/zlib" "-fvisibility=hidden" "-DZ_SOLO" "-DSTDC" "-D_LARGEFILE64_SOURCE" "-D_POSIX_SOURCE" "-o" "/Users/zhouyou/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/build/libz-sys-590f767ffa4361ba/out/lib/src/zlib/adler32.o" "-c" "src/zlib/adler32.c"
  cargo:warning=error: unable to create target: 'No available targets are compatible with triple "wasm32-unknown-wasi"'
  cargo:warning=1 error generated.
  exit status: 1

  --- stderr


  error occurred: Command "clang" "-O3" "-ffunction-sections" "-fdata-sections" "-fPIC" "--target=wasm32-wasi" "-I" "src/zlib" "-fvisibility=hidden" "-DZ_SOLO" "-DSTDC" "-D_LARGEFILE64_SOURCE" "-D_POSIX_SOURCE" "-o" "/Users/zhouyou/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/build/libz-sys-590f767ffa4361ba/out/lib/src/zlib/adler32.o" "-c" "src/zlib/adler32.c" with args "clang" did not execute successfully (status code exit status: 1).

When i added PKG_CONFIG ENV like this:

PKG_CONFIG=/usr/local/bin/pkg-config cargo build --target wasm32-wasi --release

Get the following linking error:

   Compiling libz-sys v1.1.8
   Compiling flate2 v1.0.24
   Compiling mysql_common v0.29.1
   Compiling mysql_async_wasi v0.30.0
   Compiling order_demo_service v0.1.0 (/Users/zhouyou/2022/wasm/microservice-rust-mysql)
error: linking with `rust-lld` failed: exit status: 1
  |
  = note: "rust-lld" "-flavor" "wasm" "--rsp-quoting=posix" "--export" "main" "--export=__heap_base" "--export=__data_end" "-z" "stack-size=1048576" "--stack-first" "--allow-undefined" "--fatal-warnings" "--no-demangle" "~/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/wasm32-wasi/lib/self-contained/crt1-command.o" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/order_demo_service-a41d06f3d7f0e3e4.order_demo_service.d7dd1bde-cgu.0.rcgu.o" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/order_demo_service-a41d06f3d7f0e3e4.order_demo_service.d7dd1bde-cgu.1.rcgu.o" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/order_demo_service-a41d06f3d7f0e3e4.order_demo_service.d7dd1bde-cgu.10.rcgu.o" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/order_demo_service-a41d06f3d7f0e3e4.order_demo_service.d7dd1bde-cgu.11.rcgu.o" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/order_demo_service-a41d06f3d7f0e3e4.order_demo_service.d7dd1bde-cgu.12.rcgu.o" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/order_demo_service-a41d06f3d7f0e3e4.order_demo_service.d7dd1bde-cgu.13.rcgu.o" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/order_demo_service-a41d06f3d7f0e3e4.order_demo_service.d7dd1bde-cgu.14.rcgu.o" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/order_demo_service-a41d06f3d7f0e3e4.order_demo_service.d7dd1bde-cgu.15.rcgu.o" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/order_demo_service-a41d06f3d7f0e3e4.order_demo_service.d7dd1bde-cgu.2.rcgu.o" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/order_demo_service-a41d06f3d7f0e3e4.order_demo_service.d7dd1bde-cgu.3.rcgu.o" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/order_demo_service-a41d06f3d7f0e3e4.order_demo_service.d7dd1bde-cgu.4.rcgu.o" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/order_demo_service-a41d06f3d7f0e3e4.order_demo_service.d7dd1bde-cgu.5.rcgu.o" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/order_demo_service-a41d06f3d7f0e3e4.order_demo_service.d7dd1bde-cgu.6.rcgu.o" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/order_demo_service-a41d06f3d7f0e3e4.order_demo_service.d7dd1bde-cgu.7.rcgu.o" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/order_demo_service-a41d06f3d7f0e3e4.order_demo_service.d7dd1bde-cgu.8.rcgu.o" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/order_demo_service-a41d06f3d7f0e3e4.order_demo_service.d7dd1bde-cgu.9.rcgu.o" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/order_demo_service-a41d06f3d7f0e3e4.1hhm9rnxclxwokci.rcgu.o" "-L" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps" "-L" "~/2022/wasm/microservice-rust-mysql/target/release/deps" "-L" "~/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/wasm32-wasi/lib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libanyhow-f6b3946158b8b39b.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libmysql_async-eabf4663f162a549.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/liburl-5ffbd428d72292d7.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libidna-e554bcaf8ede1637.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libunicode_normalization-f726e8669b916b1c.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libtinyvec-d7d41b335812e6ec.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libtinyvec_macros-4c8e51b73a9b2f47.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libunicode_bidi-5cfe4cfd2f322816.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libform_urlencoded-5b143efd873e28a3.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libpercent_encoding-e83aeacdd7415160.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libtwox_hash-c95dcd3890331183.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/liblru-516c33d5b26780e7.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libpin_project-ccf930fc388ab151.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libcrossbeam-ad561ff89c13f0b0.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libcrossbeam_channel-300ea25e2cf16b66.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libcrossbeam_deque-349e1ea3a89e7a77.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libcrossbeam_queue-ce5db70cc457698c.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libcrossbeam_epoch-ef21f49df4e5f145.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libmemoffset-ac09d9930f9aa6da.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libscopeguard-9d1dcf96919ab17d.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libcrossbeam_utils-787e2a94bf14b33c.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libmysql_common-428303c1646822fb.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/liblazy_static-7db850db66ce5df7.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libbitflags-09b32db59c3f72e6.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libthiserror-c5aed46731763756.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libbitvec-3d45e048ea192d47.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libwyz-4a56cae148094fd4.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libtap-834883f9b2dc1572.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libradium-54e24ffcde0ad72c.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libfunty-749388bfc44cb063.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libsha2-770b474adbf3f7a3.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libflate2-6b8582d1f0fe7988.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/liblibz_sys-edd67eb112565044.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libcrc32fast-3247aea9dc6787a6.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libsaturating-e5d8820f9d808ea3.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/liblexical-4a401a85c16590b0.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/liblexical_core-5791c47b234d9142.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/liblexical_write_float-352e867e92723974.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/liblexical_write_integer-472181b1f8e1e93f.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/liblexical_parse_float-ec262b626c97620c.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/liblexical_parse_integer-0967d46bcb98feca.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/liblexical_util-e5bd68e1f571b8b8.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libstatic_assertions-dffc96057e15d704.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libsmallvec-91d7324f401fd68b.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libsha1-4dff33b1805c2461.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libdigest-f4029a77c3159f6c.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libblock_buffer-240a6a70829aa342.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libcrypto_common-b90038de6f88556b.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libgeneric_array-e10dd698223a93e4.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libtypenum-deebf6c672b80a0a.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libbyteorder-3a44b1f75f1dd7dc.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libregex-2eb61bdf6fdf2305.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libaho_corasick-ec4e5801e1b70704.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libregex_syntax-f5d7a5f5507c7cd9.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libbase64-4730b53692cfda03.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/librand-87ae55730bafda68.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/librand_chacha-ba0b332a0687d682.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libppv_lite86-cf54d23981a270df.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/librand_core-a48345654d5d5877.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libserde_json-1dbbd770227a64cb.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libryu-20e64358b9fe17d3.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libuuid-4f03c4b2229140dd.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libtime-07f4085f167d6408.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libtime_core-9e2ff1f8912620e1.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/librust_decimal-9b61f49fb2718542.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libserde-0e2d3a29db918c8d.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libarrayvec-0c624d46dcb25f00.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libfrunk-c22cf26b32972fb1.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libfrunk_core-e492df9dff03f206.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libbigdecimal-38e0b5eb6e95f141.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libnum_bigint-16e93629cfcd58c2.rlib" "~/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libnum_integer-a26d009ce48feafd.rlib" "/Users/zhouyou/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libnum_traits-fcf67784416214ae.rlib" "/Users/zhouyou/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libhyper-23ca12243dd69e6a.rlib" "/Users/zhouyou/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libwant-4deeee9e9eee5068.rlib" "/Users/zhouyou/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libtry_lock-0d3332e95e722454.rlib" "/Users/zhouyou/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libhttparse-e8978e844b5967c4.rlib" "/Users/zhouyou/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libh2-4de239bf635cc6d6.rlib" "/Users/zhouyou/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libindexmap-b3c5305b473839b5.rlib" "/Users/zhouyou/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libhashbrown-b2cce59ce2becf44.rlib" "/Users/zhouyou/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libahash-d16ef27207a60c71.rlib" "/Users/zhouyou/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libgetrandom-12091bff14349c40.rlib" "/Users/zhouyou/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libwasi-f7ceff88a6acfbab.rlib" "/Users/zhouyou/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libtokio_util-d1264cae5bb6b1c9.rlib" "/Users/zhouyou/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libfutures_sink-1f63f8dfaf6acba1.rlib" "/Users/zhouyou/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libtower_service-b522d57f10ee6a6a.rlib" "/Users/zhouyou/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libtracing-dbe4cc5b1572e4c4.rlib" "/Users/zhouyou/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libtracing_core-45c01e6a2e217f51.rlib" "/Users/zhouyou/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libonce_cell-47b7fabe5ad79cc3.rlib" "/Users/zhouyou/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libfutures_channel-c2513e2e3a21980b.rlib" "/Users/zhouyou/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libhttp_body-95e0859a6565c565.rlib" "/Users/zhouyou/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libfutures_util-a78cc745a6ec8115.rlib" "/Users/zhouyou/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libslab-3c83a6049833c073.rlib" "/Users/zhouyou/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libfutures_task-f75c905e8feb6cc9.rlib" "/Users/zhouyou/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libpin_utils-423210ef3c42e77b.rlib" "/Users/zhouyou/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libfutures_core-dfc4be41964c3e5a.rlib" "/Users/zhouyou/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libtokio-a7095eb8fa5ca17c.rlib" "/Users/zhouyou/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libmemchr-51a47e65dbfbc174.rlib" "/Users/zhouyou/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libmio-6099ebaa2155ff99.rlib" "/Users/zhouyou/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libwasmedge_wasi_socket-2afc908dc46f1450.rlib" "/Users/zhouyou/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/liblibc-1dad0bf35c4b89b8.rlib" "/Users/zhouyou/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/liblog-084c3e2b37422d04.rlib" "/Users/zhouyou/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libcfg_if-98550d1237218586.rlib" "/Users/zhouyou/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libpin_project_lite-f04315829fb7032c.rlib" "/Users/zhouyou/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libhttpdate-3be0cf4f3b91a64b.rlib" "/Users/zhouyou/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libhttp-0e8266bb72330515.rlib" "/Users/zhouyou/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libitoa-644e3ec7b17e2703.rlib" "/Users/zhouyou/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libbytes-aa921d73ea0c4c01.rlib" "/Users/zhouyou/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/libfnv-b77b1f203969d7f6.rlib" "/Users/zhouyou/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/wasm32-wasi/lib/libstd-efaaba0891f431e6.rlib" "/Users/zhouyou/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/wasm32-wasi/lib/libpanic_abort-577f4466b7011fd9.rlib" "/Users/zhouyou/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/wasm32-wasi/lib/libwasi-1e435a747e54147c.rlib" "/Users/zhouyou/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/wasm32-wasi/lib/librustc_demangle-8978a0a7245bb046.rlib" "/Users/zhouyou/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/wasm32-wasi/lib/libstd_detect-46afd6c73b5def14.rlib" "/Users/zhouyou/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/wasm32-wasi/lib/libhashbrown-8ddc3196515a59e3.rlib" "/Users/zhouyou/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/wasm32-wasi/lib/libminiz_oxide-2ab278248037e9fe.rlib" "/Users/zhouyou/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/wasm32-wasi/lib/libadler-9253e5a77329e839.rlib" "/Users/zhouyou/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/wasm32-wasi/lib/librustc_std_workspace_alloc-f63f168fbb57a25e.rlib" "/Users/zhouyou/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/wasm32-wasi/lib/libunwind-73dda9d0dc955dfa.rlib" "/Users/zhouyou/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/wasm32-wasi/lib/libcfg_if-9b87145ec81a0bcf.rlib" "/Users/zhouyou/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/wasm32-wasi/lib/liblibc-a618bef1900d4d44.rlib" "-l" "c" "/Users/zhouyou/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/wasm32-wasi/lib/liballoc-de179dc5e1ee1c8a.rlib" "/Users/zhouyou/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/wasm32-wasi/lib/librustc_std_workspace_core-e6dfdb6d4d812540.rlib" "/Users/zhouyou/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/wasm32-wasi/lib/libcore-d38cb67398a49399.rlib" "/Users/zhouyou/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/wasm32-wasi/lib/libcompiler_builtins-470446c680a98e2c.rlib" "-l" "z" "-L" "/Users/zhouyou/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/wasm32-wasi/lib" "-L" "/Users/zhouyou/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/wasm32-wasi/lib/self-contained" "-o" "/Users/zhouyou/2022/wasm/microservice-rust-mysql/target/wasm32-wasi/release/deps/order_demo_service-a41d06f3d7f0e3e4.wasm" "--gc-sections" "-O3"
  = note: rust-lld: error: unable to find library -lz

What mistakes i do, or lib versions not match, or some bugs, please help me take look it.
Thanks!

operating system is not supported

Ubuntu x86_64, running docker compose up got a msg operating system is not supported

$ uname -a
Linux 5.4.0-126-generic #142-Ubuntu SMP Fri Aug 26 12:12:57 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
 => [build 1/4] COPY Cargo.toml orders.json update_order.json .                                                                                          0.0s
 => [build 2/4] COPY src ./src                                                                                                                           0.0s
 => [build 3/4] RUN --mount=type=cache,target=/usr/local/cargo/git/db     --mount=type=cache,target=/usr/local/cargo/registry/cache     --mount=type=c  68.5s
 => [build 4/4] RUN /root/.wasmedge/bin/wasmedgec target/wasm32-wasi/release/order_demo_service.wasm order_demo_service.wasm                            66.8s
 => [stage-2 1/1] COPY --link --from=build /src/order_demo_service.wasm /order_demo_service.wasm                                                         0.0s
 => ERROR exporting to image                                                                                                                             0.1s
 => => exporting layers                                                                                                                                  0.1s
 => => writing image sha256:8139f0063222ee1099fe0d240389b13757f2257b6a00911221bea050565351f2                                                             0.0s
------
 > exporting to image:
------
failed to solve: operating system is not supported

docker-desktop cannot build it

docker desktop version :
图片

D:\gitpro\microservice-rust-mysql>docker compose up
[+] Running 1/1
! server Warning 21.0s
[+] Building 15.8s (6/6) FINISHED
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 1.08kB 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> resolve image config for docker.io/docker/dockerfile:1 15.4s
=> CACHED docker-image://docker.io/docker/dockerfile:1@sha256:42399d4635eddd7a9b8a24be879d2f9a930d0ed040a61324cf 0.0s
=> [internal] load .dockerignore 0.0s
=> [internal] load build definition from Dockerfile 0.0s
failed to solve: rpc error: code = Unknown desc = failed to solve with frontend dockerfile.v0: failed to solve with frontend gateway.v0: rpc error: code = Unknown desc = dockerfile parse error on line 6: unknown instruction: set (did you mean user?)

#it works after modify like below
`FROM --platform=$BUILDPLATFORM rust:1.64 AS buildbase
WORKDIR /src
RUN apt-get update && apt-get install -y
git
clang
&& rustup target add wasm32-wasi

RUN curl -sSf https://raw.githubusercontent.com/WasmEdge/WasmEdge/master/utils/install.sh | bash

FROM buildbase AS build
COPY Cargo.toml orders.json update_order.json .
COPY src ./src

RUN --mount=type=cache,target=/usr/local/cargo/git/db
--mount=type=cache,target=/usr/local/cargo/registry/cache
--mount=type=cache,target=/usr/local/cargo/registry/index
cargo build --target wasm32-wasi --release

RUN /root/.wasmedge/bin/wasmedgec target/wasm32-wasi/release/order_demo_service.wasm order_demo_service.wasm

FROM scratch
ENTRYPOINT [ "order_demo_service.wasm" ]
COPY --from=build /src/order_demo_service.wasm /order_demo_service.wasm`

ERROR [server build 3/5] RUN cargo build --target wasm32-wasi --release

1、docker desktop +wasm follows https://docs.docker.com/desktop/wasm/#troubleshooting
2、docker compose up error logs

 => ERROR [server build 3/5] RUN cargo build --target wasm32-wasi --release                                                            1.9s 
------                                                                                                                                      
 > [server build 3/5] RUN cargo build --target wasm32-wasi --release:                                                                       
1.100     Updating crates.io index
1.828 error: failed to get `anyhow` as a dependency of package `order_demo_service v0.1.0 (/src)`
1.829 
1.829 Caused by:
1.829   failed to load source for dependency `anyhow`
1.829 
1.829 Caused by:
1.829   Unable to update registry `crates-io`
1.829 
1.829 Caused by:
1.829   failed to fetch `https://github.com/rust-lang/crates.io-index`
1.829 
1.829 Caused by:
1.829   network failure seems to have happened
1.829   if a proxy or similar is necessary `net.git-fetch-with-cli` may help here
1.829   https://doc.rust-lang.org/cargo/reference/config.html#netgit-fetch-with-cli
1.829 
1.829 Caused by:
1.829   the SSL certificate is invalid; class=Ssl (16); code=Certificate (-17)
------
failed to solve: process "/bin/sh -c cargo build --target wasm32-wasi --release" did not complete successfully: exit code: 101

env:
windows 10, vmware ubuntu22.04 , desktop v4.24.2

how to fix this error?
thanks a lot!!!

bug: DNS not resolving service name to IP address

Related issue:

  1. moby/moby#47403
  2. #22

The current status:

  1. WASM container cannot resolve the service name
  2. The DNS server of docker-compose is still 127.0.0.11:53
  3. The DNS_SERVER magic is not working.
  4. The wasi-socket component inside WasmEdge is not changed.
  5. We should check all used wasi-socket crates to see if there are some modifications related to this problem <-- We are here now

bug: running cargo in readme.md fails

environment:
Mac m3
k3d/ks3

ran:

# Install Rust                    
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env
# Install WebAssembly target for Rust
rustup target add wasm32-wasi

# Install WasmEdge
curl -sSf https://raw.githubusercontent.com/WasmEdge/WasmEdge/master/utils/install.sh | bash -s -- -e all
source $HOME/.wasmedge/env

git clone https://github.com/second-state/microservice-rust-mysql.git

cd microservice-rust-mysql  

cargo build --target wasm32-wasi --release

expected:
no errors on build

received:

   Compiling order_demo_service v0.1.0 (/Users/andyanderson/projects/microservice-rust-mysql)
warning: private item shadows public glob re-export
 --> src/main.rs:7:5
  |
7 | use std::result::Result;
  |     ^^^^^^^^^^^^^^^^^^^
  |
note: the name `Result` in the type namespace is supposed to be publicly re-exported here
 --> src/main.rs:4:9
  |
4 | pub use mysql_async::*;
  |         ^^^^^^^^^^^^^^
note: but the private item here shadows it
 --> src/main.rs:7:5
  |
7 | use std::result::Result;
  |     ^^^^^^^^^^^^^^^^^^^
  = note: `#[warn(hidden_glob_reexports)]` on by default

warning: `order_demo_service` (bin "order_demo_service") generated 1 warning
    Finished release [optimized] target(s) in 20.14s

start server failed

image

I tried to use wasmedge --env "DATABASE_URL=mysql://user:[email protected]:3306/mysql" order_demo_service.wasm to run the program, but the above error occurred, how can I solve it ?

Compile error when `crossbeam-utils v0.8.13` in MacOS Big Sur 12.6.1

  • wasmedge version 0.11.2
  • rust version: 1.65.0

Hi, just a newbie here, want to ask if anyone occurred this issue by following README.md? Thanks

➤ RUST_BACKTRACE=1 cargo build --target wasm32-wasi --release
   Compiling crossbeam-utils v0.8.13
   Compiling serde_derive v1.0.147
   Compiling cfg-if v1.0.0
   Compiling itoa v1.0.4
   Compiling proc-macro-hack v0.5.19
   Compiling frunk_core v0.4.1
   Compiling minimal-lexical v0.2.1
   Compiling num-traits v0.2.15
   Compiling libloading v0.7.4
error: failed to run custom build command for `crossbeam-utils v0.8.13`

Caused by:
  process didn't exit successfully: `/Users/morris_tai/Documents/Whynot/microservice-rust-mysql/target/release/build/crossbeam-utils-e10b4f58993e0ccd/build-script-build` (exit status: 101)
  --- stderr
  thread 'main' panicked at 'index out of bounds: the len is 2 but the index is 2', /Users/morris_tai/.cargo/registry/src/github.com-1ecc6299db9ec823/crossbeam-utils-0.8.13/build-common.rs:8:18
  stack backtrace:
     0: rust_begin_unwind
               at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/panicking.rs:584:5
     1: core::panicking::panic_fmt
               at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/core/src/panicking.rs:142:14
     2: core::panicking::panic_bounds_check
               at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/core/src/panicking.rs:84:5
     3: <usize as core::slice::index::SliceIndex<[T]>>::index
     4: <alloc::vec::Vec<T,A> as core::ops::index::Index<I>>::index
     5: build_script_build::convert_custom_linux_target
     6: build_script_build::main
     7: core::ops::function::FnOnce::call_once
  note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
warning: build failed, waiting for other jobs to finish...

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.