データベース機能の検証
時には、特定のコードが特定のデータベースバージョンでしか動作しないことがあります。そのようなコードはできるだけ避けたいのですが、データベース (のバージョン) 固有の動作を追加しなければならないこともあります。
そのために、以下のような方法があります:
-
ApplicationRecord.database.version
: PostgreSQLのバージョン番号をX.Y.Z
の書式で文字列として返します。
これにより、以下のようなコードを書くことができます:
if ApplicationRecord.database.version.to_f >= 11.7
run_really_fast_query
else
run_fast_query
end
読み取り専用データベース
データベースは読み込み専用モードで使用できます。この場合、すべての GET リクエストがデータベースへの書き込みオペレーションを試みないようにしなければなりません。これらのリクエストのうちのひとつがデータベースに書き込みたい場合は、Gitlab::Database.read_only?
あるいはGitlab::Database.read_write?
ガードでラップする必要があります。
Railsミドルウェアでは、書き込みの可能性があるオペレーション(CRUDのCUD
オペレーション)をフィルタリングして、ユーザーがデータベースを更新しようとして500エラーになるのを防ぎます(Gitlab::Middleware::ReadOnly
を参照)。