2020-12-01から1ヶ月間の記事一覧

Rust lettreで日本語を含むメールを送信

MTA含めてハマりまくったので記録しておきます。 ローカルMTAを使う場合、 現在の最新lettre 0.10-alphaの場合、 SmtpTransport::unencrypted_localhost(); 0.9の場合、 SmtpClient::new_unencrypted_localhost().unwrap().transport(); 但し、Dockerで25por…

Rust rusoto_s3でS3読み書き用署名付きURLを取得する

rusoto_s3でS3非公開bucketへのpresign URLを取得したので記録しておきます。 参考にしたページ rusoto/s3.rs at master · rusoto/rusoto · GitHub rusoto_s3 presignで検索するも上記のテストコードしかめぼしい情報がなく、テストコードを読み進めていく。…

Rust Futureを返す非同期関数を高階関数で使用する

例えば、以下のような関数。 pub async fn func_name() -> String { "".to_string() } 実際は以下のようにimpl futures::Futureが返される関数のようになる。 pub fn func_name() -> impl futures::Future<Output = String> で、こういった関数を、高階関数の引数として与えた</output>…

Vue TypeScript マウント済みコンポーネント再利用時に非同期処理を行う。及びVuexのwatchについて

普段、非同期でデータを取ってきてデータを表示する時は、createdライフサイクルで非同期でこと足りるんだけど、$router.pushで同じコンポーネントに遷移しようとした場合、mount済みコンポーネントを再利用しようとして、created, mountedなんかが呼び出さ…

vue-router遷移時にbootstrap JQueryがリロードしないと動作しない

vue + bootstrapで構成したページ。 signin成功時に this.$router.push("/"); いつも通りvue-routerにpushするも、遷移先のページでbootstrapのJQueryが動作しない...。 ブラウザをリロードすると動作するんだけど(^_^;) ググってみるとRailsにはそういった…

Rust Diesel r2d2のpool数設定

diesel = { version = "1.4.4", features = ["postgres", "chrono", "r2d2"] } で、r2d2でconnection poolingを使用する時。 デフォルトのpool数は10個みたい。 で、actix-webなんかだと起動時にアプリケーションが4スレッド立ち上がるので、4 * 10個のセッ…

Rust 親子関係を持つレコードを木構造に変換する

以下のような親子(id -> parent)関係のあるレコードを、 [ { id: "1", parent: "", name: "/", path: "/", child_count: 0, depth: 1 }, { id: "2", parent: "1", name: "home", path: "/home/", child_count: 0, depth: 2 }, { id: "3", parent: "2", name:…

Rust jwtの発行と検証

actix-webでjwtの発行と検証を行ったので記録しておきます。 Cargo.toml こちら GitHub - Keats/jsonwebtoken: JWT lib in rust を使用しました。 jsonwebtoken = "7" jwtの生成 例として8時間まで有効のjwtを生成。尚、expireを指定しないとjwt decode時にt…

Rust Dieselでプリペーアドクエリを発行する

ドキュメントには、 let users = sql_query("SELECT * FROM users WHERE id > ? AND name <> ?") .bind::<Integer, _>(1) .bind::<Text, _>("Tess") .get_results(&connection); diesel::query_builder::SqlQuery - Rust とあるけど、MySQLとPostgreSQLでプレースホルダー指定子が</text,></integer,>…

Rust Disel DBのデフォルト値を使いつつ、model bindと共存する

fetch処理前提 例えば、select * from ...と全カラム取得する場合、bindするmodelの定義は #[derive(Debug, Clone, Queryable, Identifiable)] pub struct Account { pub id: String, pub name: String, pub email: String, pub password: String, pub avata…

Rust validatorを導入する

actix-webにvalidation処理を導入したので記録しておきます。 使用したcrateはこちら。 GitHub - Keats/validator: Simple validation for Rust structs Cargo.toml validator = { version = "0.12", features = ["derive"] } deriveを指定することでstruct…

Rust UUIDとパスワードハッシュを生成する

UUIDの生成 uuid crateを使用します。 uuid - Rust Cargo.toml uuid = { version = "0.8.1", features = ["serde", "v4"] } 生成処理のサンプル use uuid::Uuid; let uuid = Uuid::new_v4().to_hyphenated().to_string(); パスワードハッシング アルゴリズム…

Rust mockallでモックインスタンスを導入する

RustでのUnit test時にモックインスタンスを導入したので記録しておきます。 mockallの導入 Cargo.toml [dependencies] mockall = "0.8.3" mock化するインスタンスの作成 自分の場合はDBアクセスを行うRepositoryインスタンスをモック化した。実際にDBアクセ…

Rust Dieselでトランザクション処理

updateの更新結果件数を見てcommit or rollbackなんかしたかったので、明示的にbegin, rollback, commitできるインターフェースが欲しかった。 ちょっと探してみたけど、見当たらなくて、transaction_builderなんてものもあったけど、どうやら隔離レベルを指…

Rust actix-webのデバッグログについて

アクセスログについてはこのページのように記述すると actix_web::middleware::Logger - Rust midleware登録でサクっと出ると思うんだけど。 async fn main() -> std::io::Result<()> { std::env::set_var("RUST_LOG", "axtix_web=info"); env_logger::init(…

Rust actix-webでプリフライトリクエストをチェックする

actix-webでAccess-Control-Allow-Origin絡みのやつ。 actix-corsをmidleware利用する。 actix_cors - Rust Cargo.toml [dependencies] actix-web = "3" actix-cors = "0.5.3" midlewareの登録 上記の実装例を見ながら、全originからのリクエストを許可する…