Skip to content

Commit 441db53

Browse files
committed
Deploying to master from @ actix/actix-website@1f94bb7 🚀
1 parent 366ea20 commit 441db53

File tree

13 files changed

+42
-42
lines changed

13 files changed

+42
-42
lines changed

docs/application/index.html

+7-7
Large diffs are not rendered by default.

docs/databases/index.html

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<!doctype html><html lang=en><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta http-equiv=x-ua-compatible content="ie=edge"><link rel=stylesheet href=https://actix.rs/css/bootstrap-reboot.css><link rel=stylesheet href=https://actix.rs/css/bootstrap.css><link rel=stylesheet href=https://actix.rs/css/font-awesome.min.css><link rel=stylesheet href=https://actix.rs/css/actix.css><link rel=stylesheet href=https://actix.rs/css/highlight.css><link rel=icon href=https://actix.rs/favicon.ico title=actix><title>Databases</title></head><body><header class="navbar navbar-light navbar-toggleable-md bd-navbar"><nav class=actix-main-nav><div class="d-flex justify-content-between hidden-lg-up"><a href=https://actix.rs/ class=navbar-brand><img src=https://actix.rs/img/logo-nav.png class=align-middle alt></a>
22
<button class="navbar-toggle collapsed" type=button data-toggle=collapse data-target=#actix-main-nav aria-label="Toggle navigation" aria-controls=actix-main-nav aria-expanded=false>
33
<span class=navbar-toggler-icon></span></button></div><div class="navbar-collapse collapse" id=actix-main-nav><ul class="nav navbar-nav"><li class="nav-item hd-lg-down"><a class=navbar-brand href=https://actix.rs/><img src=https://actix.rs/img/logo-nav.png class=align-middle alt></a></li><li class=nav-item><a class=nav-link href=https://actix.rs/>Home</a></li><li class=nav-item><a class=nav-link href=https://actix.rs/docs/>Documentation</a></li><li class=nav-item><a class=nav-link href=https://actix.rs/community/>Community</a></li><li class=nav-item><a class=nav-link href=https://actix.rs/code/>Code</a></li></ul></div></nav></header><div class=actix-pageheader><div class=container><h1 class=display-4>Databases</h1></div></div><div class="container actix-docs"><div class=row><div class=col-md-3><button class="btn doctoggle" type=button data-toggle=collapse data-target=#collapsing-docnav aria-expanded=false aria-controls=collapsing-docnav>
4-
Toggle navigation</button><nav class="leftnav collapse show" id=collapsing-docnav><div><h5>Introduction</h5><div><ul class=nav><li><a href=https://actix.rs/docs/>Welcome</a></li><li><a href=https://actix.rs/docs/whatis/>What is Actix Web</a></li></ul></div><h5>Basics</h5><div><ul class=nav><li><a href=https://actix.rs/docs/getting-started/>Getting Started</a></li><li><a href=https://actix.rs/docs/application/>Application</a></li><li><a href=https://actix.rs/docs/server/>Server</a></li><li><a href=https://actix.rs/docs/handlers/>Handlers</a></li><li><a href=https://actix.rs/docs/extractors/>Extractors</a></li></ul></div><h5>Advanced</h5><div><ul class=nav><li><a href=https://actix.rs/docs/errors/>Errors</a></li><li><a href=https://actix.rs/docs/url-dispatch/>URL Dispatch</a></li><li><a href=https://actix.rs/docs/request/>Requests</a></li><li><a href=https://actix.rs/docs/response/>Responses</a></li><li><a href=https://actix.rs/docs/testing/>Testing</a></li><li><a href=https://actix.rs/docs/middleware/>Middleware</a></li><li><a href=https://actix.rs/docs/static-files/>Static Files</a></li></ul></div><h5>Protocols</h5><div><ul class=nav><li><a href=https://actix.rs/docs/websockets/>Websockets</a></li><li><a href=https://actix.rs/docs/http2/>HTTP/2</a></li></ul></div><h5>Patterns</h5><div><ul class=nav><li><a href=https://actix.rs/docs/autoreload/>Auto-Reloading</a></li><li class=active><a href=https://actix.rs/docs/databases/>Databases</a></li></ul></div><h5>Diagrams</h5><div><ul class=nav><li><a href=https://actix.rs/docs/http_server_init/>HTTP Server Initialization</a></li><li><a href=https://actix.rs/docs/conn_lifecycle/>Connection Lifecycle</a></li></ul></div><h5>API Documentation</h5><div><ul class=nav><li><a href=https://docs.rs/actix target=view_window>actix <span class="fa fa-external-link"></span></a></li><li><a href=https://docs.rs/actix-web/ target=view_window>actix-web <span class="fa fa-external-link"></span></a></li></ul></div></div></nav></div><div class=col-md-9><div class=actix-content><h1 id=async-options>Async Options</h1><p>We have several example projects showing use of async database adapters:</p><ul><li>Postgres: <a href=https://github.com/actix/examples/tree/master/databases/postgres>https://github.com/actix/examples/tree/master/databases/postgres</a></li><li>SQLite: <a href=https://github.com/actix/examples/tree/master/databases/sqlite>https://github.com/actix/examples/tree/master/databases/sqlite</a></li><li>MongoDB: <a href=https://github.com/actix/examples/tree/master/databases/mongodb>https://github.com/actix/examples/tree/master/databases/mongodb</a></li></ul><h1 id=diesel>Diesel</h1><p>The current version of Diesel (v1) does not support asynchronous operations, so it is important to use the <a href=https://docs.rs/actix-web/3/actix_web/web/fn.block.html><code>web::block</code></a> function to offload your database operations to the Actix runtime thread-pool.</p><p>You can create action functions that correspond to all the operations your app will perform on the database.</p><div class=highlight><pre class=chroma><code class=language-rust data-lang=rust><span class=k>fn</span> <span class=nf>insert_new_user</span><span class=p>(</span><span class=n>db</span>: <span class=kp>&amp;</span><span class=nc>SqliteConnection</span><span class=p>,</span><span class=w> </span><span class=n>user</span>: <span class=nc>CreateUser</span><span class=p>)</span><span class=w> </span>-&gt; <span class=nb>Result</span><span class=o>&lt;</span><span class=n>User</span><span class=p>,</span><span class=w> </span><span class=n>Error</span><span class=o>&gt;</span><span class=w> </span><span class=p>{</span><span class=w>
4+
Toggle navigation</button><nav class="leftnav collapse show" id=collapsing-docnav><div><h5>Introduction</h5><div><ul class=nav><li><a href=https://actix.rs/docs/>Welcome</a></li><li><a href=https://actix.rs/docs/whatis/>What is Actix Web</a></li></ul></div><h5>Basics</h5><div><ul class=nav><li><a href=https://actix.rs/docs/getting-started/>Getting Started</a></li><li><a href=https://actix.rs/docs/application/>Application</a></li><li><a href=https://actix.rs/docs/server/>Server</a></li><li><a href=https://actix.rs/docs/handlers/>Handlers</a></li><li><a href=https://actix.rs/docs/extractors/>Extractors</a></li></ul></div><h5>Advanced</h5><div><ul class=nav><li><a href=https://actix.rs/docs/errors/>Errors</a></li><li><a href=https://actix.rs/docs/url-dispatch/>URL Dispatch</a></li><li><a href=https://actix.rs/docs/request/>Requests</a></li><li><a href=https://actix.rs/docs/response/>Responses</a></li><li><a href=https://actix.rs/docs/testing/>Testing</a></li><li><a href=https://actix.rs/docs/middleware/>Middleware</a></li><li><a href=https://actix.rs/docs/static-files/>Static Files</a></li></ul></div><h5>Protocols</h5><div><ul class=nav><li><a href=https://actix.rs/docs/websockets/>Websockets</a></li><li><a href=https://actix.rs/docs/http2/>HTTP/2</a></li></ul></div><h5>Patterns</h5><div><ul class=nav><li><a href=https://actix.rs/docs/autoreload/>Auto-Reloading</a></li><li class=active><a href=https://actix.rs/docs/databases/>Databases</a></li></ul></div><h5>Diagrams</h5><div><ul class=nav><li><a href=https://actix.rs/docs/http_server_init/>HTTP Server Initialization</a></li><li><a href=https://actix.rs/docs/conn_lifecycle/>Connection Lifecycle</a></li></ul></div><h5>API Documentation</h5><div><ul class=nav><li><a href=https://docs.rs/actix target=view_window>actix <span class="fa fa-external-link"></span></a></li><li><a href=https://docs.rs/actix-web/ target=view_window>actix-web <span class="fa fa-external-link"></span></a></li></ul></div></div></nav></div><div class=col-md-9><div class=actix-content><h1 id=async-options>Async Options</h1><p>We have several example projects showing use of async database adapters:</p><ul><li>Postgres: <a href=https://github.com/actix/examples/tree/master/databases/postgres>https://github.com/actix/examples/tree/master/databases/postgres</a></li><li>SQLite: <a href=https://github.com/actix/examples/tree/master/databases/sqlite>https://github.com/actix/examples/tree/master/databases/sqlite</a></li><li>MongoDB: <a href=https://github.com/actix/examples/tree/master/databases/mongodb>https://github.com/actix/examples/tree/master/databases/mongodb</a></li></ul><h1 id=diesel>Diesel</h1><p>The current version of Diesel (v1) does not support asynchronous operations, so it is important to use the <a href=https://docs.rs/actix-web/4/actix_web/web/fn.block.html><code>web::block</code></a> function to offload your database operations to the Actix runtime thread-pool.</p><p>You can create action functions that correspond to all the operations your app will perform on the database.</p><div class=highlight><pre class=chroma><code class=language-rust data-lang=rust><span class=k>fn</span> <span class=nf>insert_new_user</span><span class=p>(</span><span class=n>db</span>: <span class=kp>&amp;</span><span class=nc>SqliteConnection</span><span class=p>,</span><span class=w> </span><span class=n>user</span>: <span class=nc>CreateUser</span><span class=p>)</span><span class=w> </span>-&gt; <span class=nb>Result</span><span class=o>&lt;</span><span class=n>User</span><span class=p>,</span><span class=w> </span><span class=n>Error</span><span class=o>&gt;</span><span class=w> </span><span class=p>{</span><span class=w>
55
</span><span class=w> </span><span class=k>use</span><span class=w> </span><span class=bp>self</span>::<span class=n>schema</span>::<span class=n>users</span>::<span class=n>dsl</span>::<span class=o>*</span><span class=p>;</span><span class=w>
66
</span><span class=w>
77
</span><span class=w> </span><span class=c1>// Create insertion model
@@ -42,7 +42,7 @@
4242
</span><span class=w> </span><span class=p>.</span><span class=n>run</span><span class=p>()</span><span class=w>
4343
</span><span class=w> </span><span class=p>.</span><span class=k>await</span><span class=w>
4444
</span><span class=w></span><span class=p>}</span><span class=w>
45-
</span></code></pre></div><p>Now, in a request handler, use the <code>Data&lt;T></code> extractor to get the pool from app state and get a connection from it. This provides an owned database connection that can be passed into a <a href=https://docs.rs/actix-web/3/actix_web/web/fn.block.html><code>web::block</code></a> closure. Then just call the action function with the necessary arguments and <code>.await</code> the result.</p><p>This example also maps the error to an <code>HttpResponse</code> before using the <code>?</code> operator but this is not necessary if your return error type implements <a href=https://docs.rs/actix-web/3/actix_web/trait.ResponseError.html><code>ResponseError</code></a>.</p><div class=highlight><pre class=chroma><code class=language-rust data-lang=rust><span class=k>async</span><span class=w> </span><span class=k>fn</span> <span class=nf>index</span><span class=p>(</span><span class=n>pool</span>: <span class=nc>web</span>::<span class=n>Data</span><span class=o>&lt;</span><span class=n>DbPool</span><span class=o>&gt;</span><span class=p>,</span><span class=w> </span><span class=n>name</span>: <span class=nc>web</span>::<span class=n>Path</span><span class=o>&lt;</span><span class=p>(</span><span class=nb>String</span><span class=p>)</span><span class=o>&gt;</span><span class=p>)</span><span class=w> </span>-&gt; <span class=nc>impl</span><span class=w> </span><span class=n>Responder</span><span class=w> </span><span class=p>{</span><span class=w>
45+
</span></code></pre></div><p>Now, in a request handler, use the <code>Data&lt;T></code> extractor to get the pool from app state and get a connection from it. This provides an owned database connection that can be passed into a <a href=https://docs.rs/actix-web/4/actix_web/web/fn.block.html><code>web::block</code></a> closure. Then just call the action function with the necessary arguments and <code>.await</code> the result.</p><p>This example also maps the error to an <code>HttpResponse</code> before using the <code>?</code> operator but this is not necessary if your return error type implements <a href=https://docs.rs/actix-web/4/actix_web/trait.ResponseError.html><code>ResponseError</code></a>.</p><div class=highlight><pre class=chroma><code class=language-rust data-lang=rust><span class=k>async</span><span class=w> </span><span class=k>fn</span> <span class=nf>index</span><span class=p>(</span><span class=n>pool</span>: <span class=nc>web</span>::<span class=n>Data</span><span class=o>&lt;</span><span class=n>DbPool</span><span class=o>&gt;</span><span class=p>,</span><span class=w> </span><span class=n>name</span>: <span class=nc>web</span>::<span class=n>Path</span><span class=o>&lt;</span><span class=p>(</span><span class=nb>String</span><span class=p>)</span><span class=o>&gt;</span><span class=p>)</span><span class=w> </span>-&gt; <span class=nc>impl</span><span class=w> </span><span class=n>Responder</span><span class=w> </span><span class=p>{</span><span class=w>
4646
</span><span class=w> </span><span class=kd>let</span><span class=w> </span><span class=n>name</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>name</span><span class=p>.</span><span class=n>into_inner</span><span class=p>();</span><span class=w>
4747
</span><span class=w>
4848
</span><span class=w> </span><span class=kd>let</span><span class=w> </span><span class=n>conn</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>pool</span><span class=p>.</span><span class=n>get</span><span class=p>().</span><span class=n>expect</span><span class=p>(</span><span class=s>&#34;couldn&#39;t get db connection from pool&#34;</span><span class=p>);</span><span class=w>

0 commit comments

Comments
 (0)