megutech

自身の備忘録として主にWEBサーバー周りの技術について投稿しています。

X (Twitter) のIntent URL `/intent/tweet` vs `/intent/post`

WebからXへシェアする機能を実装したところ、Xアプリが起動 -> アプリ内ブラウザ起動 -> Safariへリダイレクト -> Xアプリ起動という無限ループに陥った。 調査の結果、Intent URLのエンドポイントによって挙動が異なることが判明したので備忘録として残す。…

シャドーイングも声真似も全部これ1つ。音声分析×練習ループで劇的成長できる「Rekoe」

この度個人で開発している 声トレ/声まね練習アプリ『Rekoe』 を公開しました。 この記事では、Rekoeの概要、主な機能、使い方、開発の背景、そして今後のアップデート計画をまとめます。 初めての方でも使い始めやすいよう構成しています。 こんな人におす…

SvelteKitの遅延読み込み中にエラーが発生するとクラッシュする

昨日の記事で無事遅延読み込みは成功するようになりました。 megu-tech.hatenablog.com しかし新たな問題として、この遅延読み込み処理中にエラーが発生すると、sveltekitがクラッシュすることがあるという現象に見舞われました。 環境 Service Version @sve…

Nginx環境でのSvelteKit遅延読み込み問題と解決策

開発環境ではSveltekitの遅延読み込みは問題なく動いていたのですが、Nginxを経由する本番環境では機能せず、ページの表示に時間がかかってしまうという現象にでくわしました。 環境 Service Version Nginx 1.18.0 @sveltejs/kit 2.5.28 Node.js 20.9.0 コー…

Sveltekitでファイルダウンロードをさせたい

sveltekitでPDFなどを返し、ダウンロードしてもらいたかったのだが、少しつまづいたので備忘録。 つまずきポイント +page.server.tsのloadでは対応できない まず最初に試したのは、+page.server.tsのloadでResponseを返すといった方法。 しかし+page.server.…

Zodiosでファイルのダウンロード

APIからstreamを取得してblob変換してダウンロードさせようとしたとき、vanillaのfetchならすんなり出来たのだが、Zodiosを利用すると少し躓いたので備忘録。 前提 サーバー側はこんな感じでstreamを返している。 return new Response(stream, { headers: { …

Rspecでsessionにダミーデータを入れたい

rspecでsessionにデータを入れてテストしたいシーンがあるかと思います。 ぱっと調べた感じだと方法が古いのか上手くいかないものが多かったので、動くものを備忘録として記事化しようと思います。 環境 Service Version Ruby 3.3.2 Ruby on Rails 7.1 rspec…

ユーザー固有のジョブの登録と起動

自動起動させたいサービスやジョブを systemd のユニットファイルにまとめて、sudo systemctl enable myservice.service といったコマンドで登録するシーンがよくあると思います。 しかし恥ずかしながら長らくユーザー固有のジョブも登録できることを知らな…

S3バケットを別アカウントへ移設

ダウンタイムなしにS3のアカウントを移設したかったのですが、巷の情報では1回のみのsyncで済ませており、ちょっと困ったので備忘録。 他との違いとしてはs3:GetObjectTaggingの追加がかなめ。 手順 移設用IAMユーザー 移設先のアカウントで以下のポリシーを…

KusanagiでNginxが何度も再起動する

Nginxのログを見ていると何度も再起動が行われていました。 幸い動作に影響は無かったものの、ひどいときには数分に一回レベルで再起動が起こるので原因を調査しました。 原因 Kusanagiはデフォルトでmonitが動いています。 monitの設定でNginxで500番台が計…

Next.jsでBOTからのアクセス時に500になる

本番稼働中のNext.js アプリケーションのログを眺めていると、稀にエラーを吐いていました。 環境 Key Val Node.js 20.9.0 Next.js 13.4.13 エラーの内容 - error Failed to handle request for / TypeError: fetch failed at Object.fetch (node:internal/d…

ruby-handlebarsのプレースホルダーに日本語を使いたい

handlebarsって便利ですよね。 さてプレースホルダー {{hoge}} に日本語を使いたい場面などありませんか? ありませんか。まあ普通はそうです。 しかし私にはそんなタイミングがあったのです。 handlebars.rbでは使えたのですが、さすがにこれはもう古すぎで…

PostgreSQLのシーケンスがずれた!

開発中色々いじっていたらシーケンスがずれた、なんてことは数年に一度くらい経験したりしないでしょうか? そんな時にぱっと直したいときは、以下を流し込めばOKです。 DO $$ DECLARE r RECORD; s text := 'public'; BEGIN FOR r IN SELECT tablename FROM …

Rspecテストで同時アクセスによる排他テストを行う

商品購入に同時にアクセスがあった場合、在庫数がマイナスにならないようにテストしておきたい。 そんなテストをしたいタイミングが多々あるのではないでしょうか? その際テーブルロックを利用して排他制御を行っていた場合、何も考えずにrspecでThreadを使…

Ruby on RailsでInstagram Graph APIを使いたい

Ruby on Rails上でInstagram Graph APIを使う情報が少なかったので、はまりポイントも併せて備忘録を残していく。 環境 Service Version Ruby 3.2.2 Ruby on Rails 7.0.4 devise 4.9.2 omniauth-oatuh2 1.3.1 omniauth-rails_csrf_protection 0.1.2 omniauth…

JavaScriptで日本語入力の文字数制限を行いたい

テキストエリアの入力文字数制限をしたいとき、change eventを拾って入力値をチェックするだけだと、変換を伴う文字入力の際に期待した動きにならなった。 環境 jsなら何でもいいんですが、今回私はreactを使ったのでreact versionを記載します。 Service Ve…

GroverでHTMLをPDFに変換したら日本語が文字化けして豆腐になっちゃった件

環境 Service Version OS Amazon Linux 2 Ruby 3.0.2 Ruby on Rails 7.0.3 grover 1.1.1 原因 Groverで使用しているpuppeteerにて日本語化対応が必要だった。 対応 日本語フォントを入れましょう。 $ sudo yum install ipa-gothic-fonts ipa-mincho-fonts ip…

Ruby on RailsでreCAPTCHA Enterprise を使いたい

無料版と有料版のreCAPTCHAとがありますが、使い方は一緒かと思ったら違ってちょっと大変だったお話。 環境 Service Version Ruby 2.7.4 Ruby on Rails 6.1 recaptcha 5.8.1 前提 Gemはrecaptchaを使います。 通常のreCAPTCHAなら下記用意しておけば、後はド…

Devise OmniAuthでサービス先へリダイレクトする前にごにょごにょしたい

OmniAuth、ほとんど何もしなくてもOAuthを実装出来て便利ですよね。 でもサービス側へリダイレクトする直前にごにょごにょしたいことってありませんか? ありませんか。そうですよね、普通は。。 まあ今回は普通じゃなかったんです。リダイレクト直前にちょ…

削除したActiveStorageへのアクセスは404にしたい

画像の更新などによりActiveStorageのBlobが削除されたにもかかわらず、URLがキャッシュされていたなどの理由により削除された画像にアクセスが来た場合、下記エラーが報告される。 ActiveRecord::RecordNotFoundactive_storage/blobs#show Couldn't find Ac…

ActiveStorageの画像ファイルなどを、アンカー要素のdownload属性でダウンロードさせたい

ActiveStorageのservice_urlのdispositionオプションがデフォルトで:inlineなため、画像やpdfのアンカーにdownload属性をつけていても、ブラウザ上で開いてしまう。 これをダウンロードさせたい。 環境 Service Version Ruby 2.7.2 Ruby on Rails 6.0.3.4 S3…

送信サーバーと同一ドメインの受信サーバー宛にメールが送信できない

送信サーバーは Amazon Lightsail 、受信サーバーはムームーメールという環境でlLightsailからメール送信ができなくなった。 元々AWSのメール送信制限に引っかかりメールが送信できなくなっており、その調査で /etc/postfix/main.cf はいじっていたのでその…

FPDIでPDF1.5以降の圧縮されたファイルを何とかしたい

FPDIで色々していたら This PDF document probably uses a compression technique which is not supported by the free parser shipped with FPDI.というエラーが。 どうやらPDF1.5以降の圧縮されたPDFの回答は無償版のFPDIではできないとのこと。 んじゃラ…

PHPでコマンド実行しようとしたら日本語が消失した

PHP

PHPでコマンドを実行する時はOSコマンドインジェクション対策としてescapeshellcmdやescapeshellargなどでエスケープすることが多いと思うが、その際にマルチバイト文字が含まれているとマルチバイト文字が空文字に変換されてしまって困った。 環境 Service …

Safariでは206 Partial Contentに対応していないとVideoタグでmp4が再生できない

S3に保存されたmp4動画をPHPを経由して配信していたのだが、iOS/MacのSafariだと再生できない事が判明した。 原因はVideoタグなどのリソースはRangeヘッダーを付けてリクエストが投げられるのだが、ここで正しく206 Partial Contentを返してあげないとSafari…

無停止でCentOS7 on EC2のEBSストレージを拡張する

遅ればせながら今回の案件で初めてEC2を触ることに。 そこでまずはステージング環境を作ろうとごにょごにょしてたら、ディスクを8GiBで作成してしましました。 ステージング環境とはいえもう少し欲しかったのでディスクを拡張しようとしたらAWSではなんと無…

Laravel6でMinIOを使う

Laravelではドキュメント通りに必要なパッケージをインストールすればS3はすぐに使うことができるようになる。 ただ開発環境はMinIOで代用したい場合などは、少し工夫が必要となる。 というのもバケット指定方法が違うのだ。 ということで config/filesystem…

S3互換のMinIOをCentOS7にインストールする

S3を使ったサービスを開発したいが、開発中は課金が発生してほしくない。 そんなわがままなあなたにMinIOが答えてくれるだろう。 今回はこのMinIOをCentOS7にインストールし、起動スクリプトを書くまでを記す。 ユーザーの追加 $ sudo useradd minio -s /sbi…

Can't resolve 'fs'

browser向けjsの環境構築中、環境によって変えたい値を.envで管理したいという事でdotenv-webpackをインストールしたのだが、bundle作成時にエラーが出てつまったので共有をしておく。 環境 Package Ver webpack 4.41.0 webpack-cli 3.3.9 webpack-dev-serve…

npm runに引数を渡そうとしてはまった話

npm run script にコマンドライン上でオプションを付ける方法が分からず20分くらいはまり、腹が立ったので今後のために残しておく。 経緯 とあるプロジェクトをcloneしてきてwebpack-dev-serverを立てようとしたとき、webpack.config.jsにデフォルトで記述さ…