問題タブ [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.

0 投票する
1 に答える
758 参照

windows - 環境変数からのロケット ポートのオーバーライドが Windows で機能しない

ドキュメントで説明されているように、環境変数を使用してポート構成をオーバーライドしながら、rocket-rs アプリケーションを実行しようとしています。

変数を設定しましたROCKET_PORT

で設定されていることを確認しましたecho。アプリケーションを ( または のいずれcargo run./application.exeで) 実行すると、引き続きポート 8000 が使用されます。

でポートを構成できることは知っていますがRocket.toml、環境変数を設定することで、コンソール セッションごとに異なるポートで実行できるようにするという考え方です。

なぜこれが機能しないのでしょうか?

0 投票する
1 に答える
4186 参照

rust - コンパイラは、データがミューテックス内にラップされていても、スレッド間でデータを安全に共有できないと言っています

StateHTTPリクエストに渡すロケットを使用しています。この構造体にはMutex<DatastoreInstance>、SQLite データベースへのアクセスを提供する が含まれており、読み取りと書き込みを安全にするためにミューテックスでロックされています。

構造体がこのように見えたとき、DatastoreInstanceSQLite 接続のみですべてが正常に機能しましたが、この構造体内にトランザクション オブジェクトも追加したいと考えました。

これはコンパイルされませんでした。これは、オブジェクトが認識している有効期間を持つオブジェクトTransactionを参照する必要があるためです。私が使用している rusqlite 内ConnectionのオブジェクトConnectionとオブジェクトは次のように定義されています。Transaction

有効期間の問題を解決するには、これらの有効期間パラメーターを追加して機能させる必要がありました。

これは結果であり、ライフタイムとミューテックスの両方の理解に従って動作するはずでしたが、次のようなコンパイラ エラーが表示されます。

DatastoreInstanceミューテックスに関する私の理解によれば、構造体全体が にラップされているため、このコードは有効である必要がありますMutex。これにより、一度に 1 つのスレッドのみがこのオブジェクトを参照することが保証されます。

私は何が欠けていますか?

a 内だけではなく、a 内で参照RefCellされている内にいると、コンパイラがもう安全であると判断しないのはなぜですか?ConnectionTransactionConnection

ミューテックスの仕組みをよく理解していませんか? 私のライフタイムは無効で、何らかの形で読み取り/書き込みの安全性が損なわれていますか? Connectionandを同じ構造内に持つ設計は、Transaction読み取り/書き込みの安全性を損なう悪い設計ですか? これを安全にするために、何らかの形でデータ構造を再設計する必要がありますか? それとも、非常に明白な何かが欠けているだけですか?