問題タブ [rust-rocket]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
windows - 環境変数からのロケット ポートのオーバーライドが Windows で機能しない
ドキュメントで説明されているように、環境変数を使用してポート構成をオーバーライドしながら、rocket-rs アプリケーションを実行しようとしています。
変数を設定しましたROCKET_PORT
:
で設定されていることを確認しましたecho
。アプリケーションを ( または のいずれcargo run
か./application.exe
で) 実行すると、引き続きポート 8000 が使用されます。
でポートを構成できることは知っていますがRocket.toml
、環境変数を設定することで、コンソール セッションごとに異なるポートで実行できるようにするという考え方です。
なぜこれが機能しないのでしょうか?
rust - コンパイラは、データがミューテックス内にラップされていても、スレッド間でデータを安全に共有できないと言っています
State
HTTPリクエストに渡すロケットを使用しています。この構造体にはMutex<DatastoreInstance>
、SQLite データベースへのアクセスを提供する が含まれており、読み取りと書き込みを安全にするためにミューテックスでロックされています。
構造体がこのように見えたとき、DatastoreInstance
SQLite 接続のみですべてが正常に機能しましたが、この構造体内にトランザクション オブジェクトも追加したいと考えました。
これはコンパイルされませんでした。これは、オブジェクトが認識している有効期間を持つオブジェクトTransaction
を参照する必要があるためです。私が使用している rusqlite 内Connection
のオブジェクトConnection
とオブジェクトは次のように定義されています。Transaction
有効期間の問題を解決するには、これらの有効期間パラメーターを追加して機能させる必要がありました。
これは結果であり、ライフタイムとミューテックスの両方の理解に従って動作するはずでしたが、次のようなコンパイラ エラーが表示されます。
DatastoreInstance
ミューテックスに関する私の理解によれば、構造体全体が にラップされているため、このコードは有効である必要がありますMutex
。これにより、一度に 1 つのスレッドのみがこのオブジェクトを参照することが保証されます。
私は何が欠けていますか?
a 内だけではなく、a 内で参照RefCell
されている内にいると、コンパイラがもう安全であると判断しないのはなぜですか?Connection
Transaction
Connection
ミューテックスの仕組みをよく理解していませんか? 私のライフタイムは無効で、何らかの形で読み取り/書き込みの安全性が損なわれていますか? Connection
andを同じ構造内に持つ設計は、Transaction
読み取り/書き込みの安全性を損なう悪い設計ですか? これを安全にするために、何らかの形でデータ構造を再設計する必要がありますか? それとも、非常に明白な何かが欠けているだけですか?