結論
VPN の接続。自分の場合は以下を VPNトンネル から除外するとうまくいった。
tailscale.exe
tailscaled.exe
tailscale-ipn.exe
VPN の接続。自分の場合は以下を VPNトンネル から除外するとうまくいった。
tailscale.exe
tailscaled.exe
tailscale-ipn.exe
オプション -nosalt
を付与する。
-nosalt
を付与しない場合一見同じ結果に見えますが、全て異なっています。
$ echo "hogehoge" | openssl enc -e -aes-256-cbc -base64 -pbkdf2 -pass pass:foobar U2FsdGVkX19a4H6vBEvUMPTyd+Q7/27pFzaPQctnCfs= $ echo "hogehoge" | openssl enc -e -aes-256-cbc -base64 -pbkdf2 -pass pass:foobar U2FsdGVkX185H8E7L8WsVniwiJ3GvRImdiv3shuooj0= $ echo "hogehoge" | openssl enc -e -aes-256-cbc -base64 -pbkdf2 -pass pass:foobar U2FsdGVkX1/6b22prbaq0g2/KN0ROK1fxB8cYPtPEPU=
-nosalt
を付与した場合$ echo "hogehoge" | openssl enc -e -aes-256-cbc -base64 -pbkdf2 -pass pass:foobar -nosalt 6/9Uo+v1TK/NbZ2BO5yPtw== $ echo "hogehoge" | openssl enc -e -aes-256-cbc -base64 -pbkdf2 -pass pass:foobar -nosalt 6/9Uo+v1TK/NbZ2BO5yPtw== $ echo "hogehoge" | openssl enc -e -aes-256-cbc -base64 -pbkdf2 -pass pass:foobar -nosalt 6/9Uo+v1TK/NbZ2BO5yPtw==
冪等にしたいのは(もちろん)diff が出るようにしたいからです。現実に運用するとなると一手間かかりますが、秘匿値を Git 管理のもとで取り扱いたいときには冪等な暗号化(復号化)は有用かと思います*1。
*1:ただし本当にまずいものはそもそもネットに出してはいけない
find_or_initialize_by
にこだわるのは本質的ではなく、find_by
や where
などでも同じです。本質はタイムゾーンの違いです。
具体例を見たほうが早いと思いますので、載せます。
user = User.find_or_initialize_by( name: 'hoge', submitted_at: '2023/04/07 17:48:31' )
これを繰り返し実行した場合に、常に user.new_record?
が true
を返してしまいます。
期待通りの動作をさせるためには、テキストでそのまま入れるのではなく Time.zone.parse
します。
ただし、データソースによってはタイムゾーンには注意が必要です(こちらなどを参照)。
user = User.find_or_initialize_by( name: 'hoge', submitted_at: Time.zone.parse('2023/04/07 17:48:31') )
これで find
でちゃんと見つけてきてくれます。
SQL を見てみるとよく分かります*1。
User.find_by(submitted_at: "2023/04/07 17:48:31") #=> SELECT "users".* FROM "users" WHERE "users"."submitted_at" = $1 LIMIT $2 [["submitted_at", "2023-04-07 17:48:31"], ["LIMIT", 1]]
User.find_by(submitted_at: Time.zone.parse("2023/04/07 17:48:31")) #=> SELECT "users".* FROM "users" WHERE "users"."submitted_at" = $1 LIMIT $2 [["submitted_at", "2023-04-07 08:48:31"], ["LIMIT", 1]]
*1:PostgreSQL を使用しています
シェルの設定ファイルに例えば以下のように組み込む。
# Starting Tailscale daemon automatically if not running... RUNNING=`ps aux | grep tailscaled | grep -v grep` if [ -z "$RUNNING" ]; then sudo tailscaled > /dev/null 2>&1 & disown fi
$ sudo tailscaled
をパスワード確認無しで実行するために /etc/sudoers
に追記をする必要がある*1
tailscaled
の場所は which tailscaled
で調べる