機能 #96
完了機能 #75: Redmine Glossary プラグインを一から作成する
Redmine Glossary プラグインのスキーマの変更
100%
説明
Redmine Glossaryの旧テーブルから新テーブルへのマイグレーションを作成する。
- terms -> glossary_terms
必須 - term_categories -> glossary_categories
必須 - glossary_style
マイグレーション要否決定
ユーザー毎の表示カスタマイズ設定は過去から引き継ぎしなくても致命的ではないので、マイグレーションをせずdropしてもよいかも。
旧テーブルterms | 新テーブルglossary_terms | |||
カラム名 | カラム型 | カラム名 | カラム型 | 備考 |
id | int(11) auto_increment | 同左 | ||
project_id | int(11) | 同左 | ||
category_id | int(11) | 同左 | ||
author_id | int(11) | 同左 | 要作成 | |
updater_id | int(11) | 同左 | 要作成 | |
name | varchar(255) | 同左 | ||
name_en | varchar(255) | 同左 | ||
datatype | varchar(255) | 同左 | ||
codename | varchar(255) | 同左 | ||
description | text | 同左 | ||
created_on | datetime | created_at | datetime | |
updated_on | datetime | updated_at | datetime | |
rubi | varchar(255) | 同左 | ||
abbr_whole | varchar(255) | 同左 | ||
tech_en | varchar(255) | 削除(未使用) | ||
name_cn | varchar(255) | 削除(未使用) | ||
name_fr | varchar(255) | 削除(未使用) |
旧テーブル term_categories | 新テーブルglossary_categories | ||
カラム名 | カラム型 | カラム名 | カラム型 |
id | int(11) auto_increment | 同左 | |
project_id | int(11) | 同左 | |
name | varchar(255) | 同左 | |
position | int(11) | 同左 |
旧テーブル glossary_style | 新テーブル glossary_view_settings | |||
カラム名 | カラム型 | カラム名 | カラム型 | 備考 |
id | int(11) auto_increment | 同左 | ||
show_desc | tinyint(1) | |||
groupby | int(11) | |||
project_scope | int(11) | |||
sort_item_0 | varchar(255) | |||
sort_item_1 | varchar(255) | |||
sort_item_2 | varchar(255) | |||
user_id | int(11) |
高橋 徹 さんが5年以上前に更新
- ステータス を 新規 から 進行中 に変更
- 進捗率 を 0 から 50 に変更
マイグレーション(スキーマ変更)スクリプトを生成するRailsのスクリプト generate migrationを実行します。
まず、テーブル名termsをglossary_termsに変更するマイグレーションを作成します。Redmine専用スクリプトは用意されていないので、Redmine基点ディレクトリでRails汎用スクリプトで雛形を生成し、プラグインディレクトリへ移動・ファイル名変更します。
D:\work\redmine> bundle exec rails generate migration rename_glossary_terms_from_terms invoke active_record create db/migrate/20191019234944_rename_glossary_terms_from_terms.rb D:\work\redmine> move db\migrate\20191019234944_rename_glossary_terms_from_terms.rb plugins\redmine_glossary\db\migrate\004_rename_glossary_terms_from_terms.rb
プラグインのdb\migrateディレクトリに、ファイル名先頭を日時から連番となるよう変更して移動します。
生成されたマイグレーションファイルの雛形は次です。
class RenameGlossaryTermsFromTerms < ActiveRecord::Migration[5.2]
def change
end
end
def changeの中に、マイグレーションメソッド(今回はrename_table)を実行するコードを記述します。
def change
+ rename_table :terms, :glossary_terms
end
changeメソッドで定義した変更はロールバックに対応することができます。
ついでに、カラムtech_en, name_cn, name_frを削除するマイグレーションを追記します。
def change
+ remove_column :terms, :tech_en, :string
+ remove_column :terms, :name_cn, :string
+ remove_column :terms, :name_fr, :string
rename_table :terms, :glossary_terms
end
テーブル名変更とカラム削除とでマイグレーションファイルを分けるかどうか悩みましたが、あまり多数のマイグレーションファイルがあるのも煩雑なので、ここでは1つのマイグレーションファイルにまとめています。
マイグレーションの実行は次です。
D:\work\redmine> bundle exec rails redmine:plugins:migrate == 4 RenameGlossaryTermsFromTerms: migrating ================================== -- remove_column(:terms, :tech_en, :string) -> 0.0218s -- remove_column(:terms, :name_cn, :string) -> 0.0116s -- remove_column(:terms, :name_fr, :string) -> 0.0103s -- rename_table(:terms, :glossary_terms) -> 0.0140s == 4 RenameGlossaryTermsFromTerms: migrated (0.0606s) ========================= D:\work\redmine>
マイグレーションの変更を戻す(ロールバック)確認をします。
D:\work\redmine> bundle exec rails redmine:plugins:migrate NAME=redmine_glossary VERSION=3 == 4 RenameGlossaryTermsFromTerms: reverting ================================== -- rename_table(:glossary_terms, :terms) -> 0.0157s -- add_column(:terms, :name_fr, :string) -> 0.0037s -- add_column(:terms, :name_cn, :string) -> 0.0039s -- add_column(:terms, :tech_en, :string) -> 0.0035s == 4 RenameGlossaryTermsFromTerms: reverted (0.0488s) ========================= D:\work\redmine>
マイグレーションファイル004の変更を戻す、すなわちマイグレーションファイル003までを適用したスキーマに戻すので、VERSION=3を指定します。
高橋 徹 さんが5年以上前に更新
- ステータス を 進行中 から 終了 に変更
- 進捗率 を 50 から 100 に変更
Redmine Glossaryプラグイン再構築 フェーズ21で本作業を実施した。
よって、本チケットはクローズする。