module Printable extend ActiveSupport::Concern def print_id puts self.id end def print_name puts self.name end end そのような場合、どのようにspecを書くのが良いでしょうか。 何も考えずにやるなら既存のActiveRecordのModelを利用することでしょうか。
module Printable extend ActiveSupport::Concern def print_id puts self.id end def print_name puts self.name end end そのような場合、どのようにspecを書くのが良いでしょうか。 何も考えずにやるなら既存のActiveRecordのModelを利用することでしょうか。
今回はALTER TABLEステートメント実行時の注意点について紹介します。 MySQLを運用していると、サービスの仕様変更や新機能のために既存のテーブルに対してテーブル定義を変更することが多いと思います。その際によく起こる問題や注意点に説明します。 ALTER TABLEステートメント まずは、簡単にALTER TABLE ステートメントについて紹介します。テーブル定義を変更するにはALTER TABLEステートメントを利用します。MySQL 5.6以降からInnoDBのテーブルにおいて、オンラインDDLが可能になっています。本連載においても第30回 InnoDBオンラインDDLについてにて紹介しています。 オンラインDDLでは、DDL実行に最小限の時間のロックを取得することで、そのDDLと並列で実行されるDMLの待機も最小限になります。そのため、サービス無停止でALTER TABLEス
はじめに hacomono VP of Platform Engineering のやじ(@srv)です。気がつくと家に車が3台ありました。 今回は「マルチテナントへの道 Provisioning 偏」と題しまして、マルチテナント化のプロビジョニングに関するお話をさせていただこうと思います。 TL;DR Rails のマルチテナント化は apartment gem を利用して実現 テナントグループという単位で Rails API を分割 テナント追加等の日々のオペレーションは Kickflow 経由で実行 Rails のマルチテナント化 マルチテナント環境では、複数のテナントが同じアプリケーションにアクセスしますが、データは分離されている必要があります。hacomono では、Rails のマルチテナント化を実現するために、apartment gem を利用しています。apartment
概要 MITライセンスに基づいて翻訳・公開いたします。 英語記事: propshaft/UPGRADING.md at main · rails/propshaft 原文更新日: 2023/12/12(c2a87b5) ライセンス: MIT 2022/07/14: 初版公開 2023/10/18: 更新 2024/02/21: 更新 Propshaftの適用範囲はSprocketsよりも狭いので、SprocketsからPropshaftへの移行にはjsbundling-rails gemとcssbundling-rails gemも利用する必要があります。本ガイドでは、プロジェクトがRails 6.1以後の以下の規約に沿っていることを前提としています。 JavaScriptのバンドルにwebpackerを利用している CSSのバンドルにsass-railsを利用している アセットのダイジェ
Rails 7.0ではフロントエンドサポートが刷新されます。新たなライブラリが多数導入され、選択肢が増えるため、「Rails公式のものを選べばOK」という戦略が通用しなくなります。 本稿では、Railsでフロントエンドを書くための選択肢について、その歴史と実装を踏まえて比較検討します。 結論から言うと(まだアルファ版なので今後も状況が変わる可能性はありますが、) 新規アプリケーションではSprocketsの役割は無くなりそうです。新しいライブラリとして Propshaft, importmap-rails, jsbundling-rails, cssbundling-rails が登場し、主要な選択肢として以下が提供されます。 (各ライブラリの詳細については後述します) Propshaft + importmap-railsデフォルトの選択肢。Node.jsが不要。トランスパイルを含め、複
Azure プライベート エンドポイントは、Azure における Private Link の基本的な構成要素です。 これにより、仮想マシン (VM) などの Azure リソースは、Azure Storage などの Private Link リソースと非公開にかつ安全に通信できます。 このチュートリアルでは、以下の内容を学習します。 仮想ネットワークと bastion ホストを作成します。 ストレージ アカウントを作成し、パブリック アクセスを無効にします。 ストレージ アカウントのプライベート エンドポイントを作成します。 仮想マシンを作成します。 ストレージ アカウントのプライベート エンドポイントに対する接続をテストします。 前提条件 Azure サブスクリプション。 Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。 Azur
Note 2024 年 6 月 1 日より、新しく作成されたすべての App Service アプリには、名前付け規則 <app-name>-<random-hash>.<region>.azurewebsites.net を使用して一意の既定のホスト名を生成するオプションが備わります。 既存のアプリ名は変更されません。 例: myapp-ds27dh7271aah175.westus-01.azurewebsites.net 詳細については、App Service リソースの一意の既定のホスト名に関するページを参照してください。 この記事では、Azure App Service の仮想ネットワーク統合機能と、それを App Service のアプリで設定する方法について説明します。 Azure Virtual Network を使用すると、インターネットにルーティングできないネットワーク
競技プログラミングの問題などでは、二項係数を非常に大きい素数 P で割った余りを出力させる問題が出題されることがあります。 \(P = 1000000007 = 10^9 + 7\) の素数を使用することなどが多いです。 単純に計算すると、\(\frac{n!}{k!(n-k)!}\)を計算してから割ることになりますが、値が非常に大きくなってしまいます。32bitや64bitの整数には収まり切らないかもしれません。 また、上手く行ったとしても、1つの二項係数を計算するのに\(O(n)\)だけかかってしまいます。 この記事ではよく使われる二項係数の計算方法をいくつかご紹介しつつ、数学的な理解をすることを目指します。 ※ 以下では「mod P」での \(a\) の逆元を \(a^{-1}\) などと書くことにします。 ※ 逆元や数学的証明について詳しくは後述 様々な二項係数のアルゴリズム \(
この記事は、「MySQL Advent Calendar 2022」の13日目の記事です。 qiita.com 株式会社エス・エム・エスでエンジニアをしている@koma_koma_dです。今回はMySQLにおけるセミジョイン最適化について調べた内容を書きます。 ※記載内容に誤りなどがある場合は筆者のTwitter宛に連絡をいただけると幸いです。 前置き この記事で書くこと この記事では、MySQLにおけるセミジョイン最適化について、サンプルテーブルを用いた実行例を示しながら、 セミジョイン最適化とは何か セミジョイン最適化はなぜ有用か セミジョイン最適化にはどのような種類があるのか どのようにクエリやテーブル定義を変えると戦略が変化するか どのような実行計画になるか どのようなオプティマイザトレースになるか などを紹介します。 執筆にあたって、Web上のリソースなどをある程度調べましたが、
Deployment¶ Server deployment is a complex area, that will depend on what kind of service you're deploying Uvicorn onto. As a general rule, you probably want to: Run uvicorn --reload from the command line for local development. Run gunicorn -k uvicorn.workers.UvicornWorker for production. Additionally run behind Nginx for self-hosted deployments. Finally, run everything behind a CDN for caching su
❯❯🐨❯❯ sw_vers ProductName: macOS ProductVersion: 12.2.1 BuildVersion: 21D62 ❯❯🐨❯❯ poetry -V Poetry version 1.1.12 ❯❯🐨❯❯ poetry run python -V Python 3.9.4 ~/Codes/fastapi_experiment ❯❯🐨❯❯ poetry show anyio 3.6.2 High level compatibility layer for multiple asynchronous event loop ... attrs 22.1.0 Classes Without Boilerplate click 8.1.3 Composable command line interface toolkit fastapi 0.87.0 Fas
自己紹介 初カキコども 医師でエンジニア?もどきのikoraです pythonについては今まで趣味程度しか触ったことがなく、またFastAPIをこの一ヶ月前くらいから触り始めました。 エンジニアの方々にとっては当たり前の非同期処理というものについてあまり理解できてなかったので、FastAPIの挙動と共に理解しようということで忘備録的に書きました。 一応後半では、真面目に実験しているのでなにかの参考になるかなと思います。 素人に毛が生えたようなものなので、もし間違い等あったら優しめにご指摘いただくと嬉しいです☺️ 始めての技術記事で拙いかもしれませんが、参考になりましたら幸いです。 まず結論 FastAPIのマルチタスク性能・高速性は非同期処理によって実現されている 従ってAPI Endpoint配下の関数(パスオペレーション関数)の書き方で速さが変わり 非同期処理 >>> 同期処理 >>>
FastAPIのrouterにはasync def/defのいずれも指定できるが、適当に決めてはならない FastAPIのrouter定義(path関数)では、def/async def のいずれも使用できるため、サンプルなどを見てなんとなくasync defにしている方もいるのではないでしょうか? 以下にasyncとsyncの実装例を記述します。 # sync @router.get("/sync") def get_develop_sync(i: int) -> None: import time print(f"start: {i}") time.sleep(30) print(f"end: {i}") # async @router.get("/async") async def get_develop_async(i: int) -> None: import time impo
こんにちは、hachi8833です。Rubyスタイルガイドを読むシリーズ、今回の「クラスとモジュール編」は2回に分けてお送りします。 Rubyスタイルガイドを読む: 総もくじ 前回: Rubyスタイルガイドを読む: コメント、アノテーション、マジックコメント 次回: Rubyスタイルガイドを読む: クラスとモジュール(2)クラス設計・アクセサ・ダックタイピングなど 参照: bbatsov/ruby-style-guide 5-01【統一】クラス定義は以下の構造で統一する Use a consistent structure in your class definitions. クラス内要素の記述順序を示しています。 class Person # extendとincludeは他の要素より先に書く extend SomeModule include AnotherModule # インナーク
ある PR A の変更に依存した PR B を作った時、main ブランチに squash マージする戦略のリポジトリだとマージされた PR A のコミットは 1 つになっており、RR B のマージ先が main に向いた時、コミットの履歴が異なるので PR A のコミットがそのまま表示され、git rebase origin/main で fast forward にしようとしても RR B では PR A のコミットが 1 つになっているため rebase でコンフリクトが発生してしまいます。 図で書くとこんな感じ PR A に依存した PR B があるブランチ PR A が main に squash merge される PR B を main で rebase して Fast Forward な状態にしようとしてもコンフリクトしてしまう コミット数が少なければコンフリクトの解消も大
注意喚起の記事になります。タイトルが結論です。 既にこの問題に言及している記事はいくつかあるのですが*1、私は気付かずに踏んでしまったので、タイトルで「おっと、うちは大丈夫かな」と思ってもらえるようにこの記事を書いています。 joinableとは何か 問題として挙げているjoinableオプションですが、これはネストしたトランザクションの挙動に影響を与えます。少しややこしいので、サンプルコードを見せながら説明します。 # frozen_string_literal: true require "bundler/inline" gemfile(true) do source "https://rubygems.org" git_source(:github) { |repo| "https://github.com/#{repo}.git" } gem "activerecord", "7.
現在、Ruby 製 worker を作成することを業務で行っているのですが、継続的にメモリ使用量が増加する現象に遭遇してました。 (グラフの値が下がったタイミングが数回ありますが、それぞれでデプロイが行われてリセットされただけ) ObjectSpace.allocation_sourcefile や ObjectSpace.allocation_sourceline を利用してどのファイルのどの行でメモリ確保が多くなるのか調べれるようにしました。 以下のようなコードを worker に追加しました。 require 'objspace' class MemoryProfiler INTERVAL = 5 * 60 DISPLAY_COUNT = 20 def self.start Thread.start do loop do memory_usages = {} ObjectSpace.
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く