動かざることバグの如し

近づきたいよ 君の理想に

Nextjsで複数台にデプロイするとJSが404エラーになる問題

環境

  • Nextjs 14

Nextjs複数台に同時にデプロイできない問題

Nextjsを使用している際に、複数のサーバーに同時にデプロイしようとすると問題が発生することがある。

具体的には、ビルドIDが各サーバーで異なるため、JSのURLが変わってしまう。よってブラウザを何回かリロードしているとJSが404でエラーになる。

これは、NextjsがデフォルトでランダムなビルドIDを生成するためであり、複数のサーバー間でビルドIDを統一しないと、クライアントサイドでのキャッシュの不整合など、予期せぬ問題が発生することがある。

この問題は、特に大規模なアプリケーションや高可用性を求める環境で顕著になり、デプロイの効率性やアプリケーションの安定性に影響を与える。

解決策

next.config.jsに以下のようにgenerateBuildIdを追記する。いわゆるhashシード的なもので、ここでは「my-build-id」と固定の文字列だが運用する場合はgitハッシュがベストだろう。

module.exports = {
  generateBuildId: async () => {
    // You can, for example, get the latest git commit hash here
    return 'my-build-id'
  },
}

参考リンク

赤本名言

赤本名言

2017年の赤本が名言だったのでメモ

はしがき

大学入試の季節が近づいてきた。寒い雪の日の朝、電車の中で受験生と思しき若者が単語帳を開いているのを見るにつけ、もうかれこれ数十年前になるが、かって自分自身が受験生だった時の姿を重ねてしまう。

高校三年生の冬、受験に失敗した。後で振り返ると、漫然と塾や予備校に通い、基礎もできていないのにレベルの高い参考書に手を出し、やった気になっていた。実際はたいして勉強していないのに根拠のない自信と慢心があって、案の定それはもろくも打ち砕かれた。大学で何をやりたいのかさえはっきりしないまま、よく考えずに志望校を決めていた。

浪人して改めて自分を見つめ直し、多くの本を読んだ。1年間の計画をしっかりと自分で組み立てたいと考え、自宅浪人の道を選んだが、思い返せば、悶々ともがき苦しみ、天井を眺めてはのたうち回るような日々であった。自分を見失い、自堕落な毎日をすごすこともあったが、試行錯誤の中でなんとか目標を見定め、少しずつ自分のペースをつかめるようになっていった。

受験当日のことはほとんど覚えていないが、手応えはあったものの、自信があるというわけではなかった。合格発表の日もすぐに見に行く勇気がなく、行ったときには既に掲示板のまわりは閑散としていたが、しばらくその場にたちつくして離れることができなかった。

大学受験はあくまでも人生における通過点にすぎず、それ自体が目的ではないのだが、受験を通して身についたこと、学んだことはもちろん、様々な努力と試行錯誤重ねた経験は、将来なんらかの形で人生の支えとなるかもしれない。雪の日に受験生を見かけるたびに、もう一度やり直せと言われてもできないような濃密な日々を懐かしくおもいだすのである。

最後になったが、家族や友人など、支えてくれる周囲の人たちへの感謝を忘れず、受験本番で持てる力を存分に発揮できるよう健康管理にも十分に注意し、見事合格の栄冠を勝ち取られることを願ってやまない。

編者しるす

picture 0

あすけんの女の存在しない記憶を生成AIでつくる

存在しないあすけんの女の記憶を作りたい

あすけんの女とは

健康管理アプリ「あすけん」に登場するマスコットキャラクター。AI栄養士さんらしい。アプリトップページに登場し、色々アドバイスくれる。

picture 0

余談だが「未来(みき)」さんってちゃんと名前あるらしい。今回画像収集するまで知らなかったw

やりたいこと

で、 なんとなくあすけんの女こと未来さんのチアリーダー姿を見てみたいと思ってしまった。が当然画像検索しても無い。

ならば生成AIで作るしかない

画像収集

公式サイトの画像だと解像度が低すぎて学習に使えないので、Google画像検索とツイッター検索を駆使してなんとか32枚の未来さんの画像をゲットした。

picture 1

あとはこれの背景を消してタグ付けし、学習

学習にはおなじみkohya-ss/sd-scriptsでモデルは当然animagine-xl-3.1を使用した。

config.tomlは以下

[general]
seed = 99
pretrained_model_name_or_path = "/app/models/animagine-xl-3.0.safetensors"
save_model_as = "safetensors"
xformers = true
mixed_precision = "bf16"
save_precision = "bf16"

[network]
# SDXLはテキストエンコーダーを学習せずにUnetのみ
network_train_unet_only = true
# cache_text_encoder_outputs = true
network_module = "networks.lora"

[optimizer]
optimizer_type = "AdamW"
learning_rate = 1e-4
lr_scheduler = "cosine_with_restarts"
lr_scheduler_num_cycles = 100
network_dim = 16 #この値を変化させる (2,4,8,16,32,64,128,256)
network_alpha = 1
network_args = ["conv_dim=8"]

[training]
save_every_n_epochs = 10
# max_train_steps = 100
max_train_epochs = 1000
output_dir = "/data/asuken/output/"
output_name = "asuken"

[memory]
# trueにすると削減
gradient_checkpointing = true
# falseにすると削減
persistent_data_loader_workers = false

[sample]
sample_every_n_epochs = 10
sample_sampler = "k_euler_a"
sample_prompts = "/data/asuken/sample_prompt.txt"

database.tomlは以下

[[datasets]]
resolution = 1024
batch_size = 1
bucket_no_upscale = true
enable_bucket = true
caption_extension = '.txt'
keep_tokens = 1

[[datasets.subsets]]
image_dir = '/data/asuken/train/'
num_repeats = 4
color_aug    = true
flip_aug = true
random_crop = true
shuffle_caption = true

結果

とりあえず料理させてみる

picture 3

おおー

秘書っぽい感じで

picture 2

で、チアガール

picture 4

picture 6

満足の出来にはなったので、あすけん頑張ります

apt updateするとGLib-Errorエラーになる問題

環境

症状

apt updateしようとすると「Sub-process returned an error code」エラーになってしまう

# apt update
ヒット:2 http://security.ubuntu.com/ubuntu bionic-security InRelease
ヒット:3 http://jp.archive.ubuntu.com/ubuntu bionic InRelease
ヒット:4 http://jp.archive.ubuntu.com/ubuntu bionic-updates InRelease
ヒット:5 http://jp.archive.ubuntu.com/ubuntu bionic-backports InRelease

(appstreamcli:13840): GLib-CRITICAL **: 19:06:54.994: g_variant_builder_end: assertion '!GVSB(builder)->uniform_item_types || GVSB(builder)->prev_item_type != NULL || g_variant_type_is_definite (GVSB(builder)->type)' failed

(appstreamcli:13840): GLib-CRITICAL **: 19:06:54.994: g_variant_new_variant: assertion 'value != NULL' failed

(appstreamcli:13840): GLib-ERROR **: 19:06:54.994: g_variant_new_parsed: 11-13:invalid GVariant format string
Trace/breakpoint trap (core dumped)
パッケージリストを読み込んでいます... 完了
E: Problem executing scripts APT::Update::Post-Invoke-Success 'if /usr/bin/test -w /var/cache/app-info -a -e /usr/bin/appstreamcli; then appstreamcli refresh-cache > /dev/null; fi'
E: Sub-process returned an error code

対応

libappstream4パッケージを最新にすると直った

apt-get install --reinstall libappstream4

経緯は

  • ユーザーがapt-get updateを実行すると、appstreamがクラッシュする問題が発生
  • この問題は、appstreamのバージョン0.12.2-1で報告される
  • エラーは、appstreamcli refresh-cacheの実行時にGLib-CRITICALのアサーションが失敗することによって引き起こされる
  • 問題は重要度「important」として分類され、aptパッケージに影響を与える
  • バグはMatthias Klumppによって修正され、バージョン0.12.2-2で修正された

参考リンク

MermaidでER図を書くテンプレート

MermaidでER図を書くテンプレート

erDiagram

  T1 ||--|{ T2: "1 対 多(1以上)"
  T1 ||--o{ T3: "1 対 多(0以上)"
  T1 ||--|| T4: "1 対 1"
  T1 ||--o| T5: "1 対 0か1"
  
  T1 {
    id BIGINT PK "ID"
    title VARCHAR(255) "タイトル"
  }

picture 0

公式サイトが1番わかりやすいっていうね https://mermaid.js.org/syntax/entityRelationshipDiagram.html#attribute-keys-and-comments