kayrx 0.7.5

The Kayrx Framework
Documentation
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <link rel="icon" href="https://avatars0.githubusercontent.com/u/58360786?s=200&v=4" title="Kayrx">
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.10.2/dist/katex.min.css" integrity="sha384-yFRtMMDnQtDRO8rLpMIKrtPCD5jdktao2TV19YiZYWMDkUR5GQZR/NOVTdquEx1j" crossorigin="anonymous">
    <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/katex-copytex@latest/dist/katex-copytex.min.css">
    <script src="https://cdn.jsdelivr.net/npm/katex-copytex@latest/dist/katex-copytex.min.js"></script>
    <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/Microsoft/vscode/extensions/markdown-language-features/media/markdown.css">
    <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/Microsoft/vscode/extensions/markdown-language-features/media/highlight.css">
    <link rel="stylesheet" type="text/css" href="https://kayrx.xyz/home.css" />
    <title>Kayrx / autoreload</title>
  </head>
  <body class="vscode-light">
    <div id="page" class="page-section-doc">
      <div id="mnav">
    
        <div id="lnav">
          <div id="left">
            <a id="front" href="/"><img src="/kayrx.png"/></a>
            <span id="dlnav">
              <a class="tail" href="/kayrx/" >Kayrx</a>
              <a class="tail" href="/yarx" >Yarx</a>
              <a class="tail" href="/blog" >Blog</a>
            </span>
          </div>
          <label ><a href="#" id="menu">M</a></label>
        </div>
        <div id="rnav">
            <li > <a href="https://spectrum.chat/kayrx" target="_black" style="color:green; font-weight: bold;" >群聊</a></li>
            <li ><a  href="/community" >社区</a></li>
            <li > <a href="/funding">赞助</a></li>
        </div> 
      </div>

      <div id="content">
        <div class="container"><div class="doc-page doc-section-pattern-autoreload">
  <div class="doc-nav">
      
  <details id="pc" open>
      <summary id="dir"><strong>目录指南</strong></summary>

      <details open>
        <summary id="title"><strong>介绍</strong></summary>
        <a class="doc-section-link-introduction-index" href="/kayrx/introduction/index.html">欢迎</a>
        <a class="doc-section-link-introduction-whatis" href="/kayrx/introduction/whatis.html">何为Actix</a>
        <a class="doc-section-link-introduction-install" href="/kayrx/introduction/install.html">安装</a>
      </details>
      
      <details open>
        <summary id="title"><strong>基本</strong></summary>
        <a class="doc-section-link-basic-start" href="/kayrx/basic/start.html">入门</a>
        <a class="doc-section-link-basic-app" href="/kayrx/basic/app.html">应用</a>
        <a class="doc-section-link-basic-server" href="/kayrx/basic/server.html">服务器</a>
        <a class="doc-section-link-basic-handler" href="/kayrx/basic/handler.html">处理器</a>
        <a class="doc-section-link-basic-extractor" href="/kayrx/basic/extractor.html">提取器</a>
      </details>
      
      <details open>
        <summary id="title"><strong>高级</strong></summary>
        <a class="doc-section-link-advance-error" href="/kayrx/advance/error.html">错误</a>
        <a class="doc-section-link-advance-url-dispatch" href="/kayrx/advance/url-dispatch.html">路由分发</a>
        <a class="doc-section-link-advance-request" href="/kayrx/advance/request.html">请求</a>
        <a class="doc-section-link-advance-response" href="/kayrx/advance/response.html">响应</a>
        <a class="doc-section-link-advance-test" href="/kayrx/advance/test.html">测试</a>
        <a class="doc-section-link-advance-middleware" href="/kayrx/advance/middleware.html">中间件</a>
        <a class="doc-section-link-advance-static-file" href="/kayrx/advance/static-file.html">静态文件</a>
      </details>
      
      <details open>
        <summary id="title"><strong>协议</strong></summary>
        <a class="doc-section-link-protocol-websocket" href="/kayrx/protocol/websocket.html">Websocket</a>
        <a class="doc-section-link-protocol-http2" href="/kayrx/protocol/http2.html">HTTP2</a>
      </details>
      
      <details open>
        <summary id="title"><strong>模式</strong></summary>
        <a class="doc-section-link-pattern-autoreload" href="/kayrx/pattern/autoreload.html">自动重载</a>
        <a class="doc-section-link-pattern-database" href="/kayrx/pattern/database.html">数据库</a>
      </details>
      
  </details>

  <!-- ===============================Mobile==================================== -->

  <details id="mobile">
      <summary id="dir"><strong>目录指南</strong></summary>

      <details open>
        <summary id="title"><strong>介绍</strong></summary>
        <a class="doc-section-link-introduction-index" href="/kayrx/introduction/index.html">欢迎</a>
        <a class="doc-section-link-introduction-whatis" href="/kayrx/introduction/whatis.html">何为Actix</a>
        <a class="doc-section-link-introduction-install" href="/kayrx/introduction/install.html">安装</a>
      </details>
      
      <details open>
        <summary id="title"><strong>基本</strong></summary>
        <a class="doc-section-link-basic-start" href="/kayrx/basic/start.html">入门</a>
        <a class="doc-section-link-basic-app" href="/kayrx/basic/app.html">应用</a>
        <a class="doc-section-link-basic-server" href="/kayrx/basic/server.html">服务器</a>
        <a class="doc-section-link-basic-handler" href="/kayrx/basic/handler.html">处理器</a>
        <a class="doc-section-link-basic-extractor" href="/kayrx/basic/extractor.html">提取器</a>
      </details>
      
      <details open>
        <summary id="title"><strong>高级</strong></summary>
        <a class="doc-section-link-advance-error" href="/kayrx/advance/error.html">错误</a>
        <a class="doc-section-link-advance-url-dispatch" href="/kayrx/advance/url-dispatch.html">路由分发</a>
        <a class="doc-section-link-advance-request" href="/kayrx/advance/request.html">请求</a>
        <a class="doc-section-link-advance-response" href="/kayrx/advance/response.html">响应</a>
        <a class="doc-section-link-advance-test" href="/kayrx/advance/test.html">测试</a>
        <a class="doc-section-link-advance-middleware" href="/kayrx/advance/middleware.html">中间件</a>
        <a class="doc-section-link-advance-static-file" href="/kayrx/advance/static-file.html">静态文件</a>
      </details>
      
      <details open>
        <summary id="title"><strong>协议</strong></summary>
        <a class="doc-section-link-protocol-websocket" href="/kayrx/protocol/websocket.html">Websocket</a>
        <a class="doc-section-link-protocol-http2" href="/kayrx/protocol/http2.html">HTTP2</a>
      </details>
      
      <details open>
        <summary id="title"><strong>模式</strong></summary>
        <a class="doc-section-link-pattern-autoreload" href="/kayrx/pattern/autoreload.html">自动重载</a>
        <a class="doc-section-link-pattern-database" href="/kayrx/pattern/database.html">数据库</a>
      </details>
      
  </details>


  </div>
  <div class="doc-content">        <h1 id="auto-reloading-development-server">Auto-Reloading Development Server</h1>
<p>During development it can be very handy to have cargo automatically recompile the code
on change.  This can be accomplished by using <a href="https://github.com/passcod/cargo-watch">cargo-watch</a>.  Because an
actix app will typically bind to a port for listening for incoming HTTP requests it makes
sense to combine this with the <a href="https://crates.io/crates/listenfd">listenfd</a> crate and the <a href="https://github.com/mitsuhiko/systemfd">systemfd</a>
utility to ensure the socket is kept open while the app is compiling and reloading.</p>
<p><code>systemfd</code> will open a socket and pass it to <code>cargo-watch</code> which will watch for
changes and then invoke the compiler and run your actix app.  The actix app
will then use <code>listenfd</code> to pick up the socket that <code>systemfd</code> opened.</p>
<h2 id="binaries-necessary">Binaries Necessary</h2>
<p>For an automatic reloading experience you need to install <code>cargo-watch</code> and
<code>systemfd</code>.  Both are written in rust and can be installed with <code>cargo install</code>:</p>
<pre><code><code><div>cargo install systemfd cargo-watch
</div></code></code></pre>
<h2 id="code-changes">Code Changes</h2>
<p>Additionally you need to slightly modify your actix app so that it can pick up
an external socket opened by <code>systemfd</code>.  Add the listenfd dependency to your app:</p>
<pre><code class="language-ini"><div><span class="hljs-section">[dependencies]</span>
<span class="hljs-attr">listenfd</span> = <span class="hljs-string">"0.3"</span>
</div></code></pre>
<p>Then modify your server code to only invoke <code>bind</code> as a fallback:</p>
<p>{{&lt; include-example example=&quot;autoreload&quot; file=&quot;<a href="http://main.rs">main.rs</a>&quot; section=&quot;autoreload&quot; &gt;}}</p>
<h2 id="running-the-server">Running the Server</h2>
<p>To now run the development server invoke this command:</p>
<pre><code><code><div>systemfd --no-pid -s http::3000 -- cargo watch -x run
</div></code></code></pre>



</div>
</div>

</div>
      </div>

      <div id="footer">
        &copy; 2019  <a href="https://github.com/kayrx">Kayrx</a>
      </div>
    </div>
    <script async>
      window.onload = function() {
            let menu = document.getElementById('menu');
            menu.addEventListener('click', function() {
                let nav = document.getElementById('rnav');
                if (nav.style.height == 'auto') {
                        nav.style.height = '0';
                }else{
                        nav.style.height = 'auto';
                }
            }, false)
    }
</script>
  </body>
</html>