diff options
author | Grzegorz Bizon <grzegorz@gitlab.com> | 2019-01-06 12:47:29 +0300 |
---|---|---|
committer | Grzegorz Bizon <grzegorz@gitlab.com> | 2019-01-06 12:47:29 +0300 |
commit | 1aa2ac13b95b9fa9527596610bb07e132dc1a6f0 (patch) | |
tree | a04dba27d51620b49b93e2d25a8ed6222cefa914 /doc | |
parent | 52d0c0edb796f21498fb4b88c99ffa6020c048a9 (diff) | |
parent | 0103d5be960e620342c67436ddd64ca9e729d7a8 (diff) |
Merge branch 'kamil-refactor-ci-builds-v5' into 'master'
Use BuildMetadata to store build configuration in JSONB form
See merge request gitlab-org/gitlab-ce!21499
Diffstat (limited to 'doc')
-rw-r--r-- | doc/development/migration_style_guide.md | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/doc/development/migration_style_guide.md b/doc/development/migration_style_guide.md index d0a054c3290..23aa318ef91 100644 --- a/doc/development/migration_style_guide.md +++ b/doc/development/migration_style_guide.md @@ -325,6 +325,31 @@ This ensures all timestamps have a time zone specified. This in turn means exist suddenly use a different timezone when the system's timezone changes. It also makes it very clear which timezone was used in the first place. +## Storing JSON in database + +The Rails 5 natively supports `JSONB` (binary JSON) column type. +Example migration adding this column: + +```ruby +class AddOptionsToBuildMetadata < ActiveRecord::Migration[5.0] + DOWNTIME = false + + def change + add_column :ci_builds_metadata, :config_options, :jsonb + end +end +``` + +On MySQL the `JSON` and `JSONB` is translated to `TEXT 1MB`, as `JSONB` is PostgreSQL only feature. + +For above reason you have to use a serializer to provide a translation layer +in order to support PostgreSQL and MySQL seamlessly: + +```ruby +class BuildMetadata + serialize :config_options, Serializers::JSON # rubocop:disable Cop/ActiveRecordSerialize +end +``` ## Testing |