clear-code / redmine_full_text_search

Full text search for Redmine
MIT License
61 stars 24 forks source link

インストールしようとするとデータベース(Mroonga)のマイグレーションに失敗する #103

Closed wate closed 2 years ago

wate commented 2 years ago

発生している事象

READMEの「Install this plugin」の手順に従い、プラグインをインストールしようとしたところ、 以下の処理を実行したところ、マイグレーションに失敗しインストールができない

RAILS_ENV=production bin/rails redmine:plugins:migrate

エラー内容

実際に表示されたエラーメッセージ部分を抜粋し以下に記載します

== 20190728022920 MroongaAddSourceTypeIdIndexToFtsTargets: migrating ==========
-- add_index(:fts_targets, :source_type_id)
rails aborted!
StandardError: An error has occurred, all later migrations canceled:

Mysql2::Error: [object][register] already used name was assigned: <fts_tags.index_fts_targets_on_tag_ids>: CREATE  INDEX `index_fts_targets_on_source_type_id`  ON `fts_targets` (`source_type_id`)
/opt/redmine/vendor/bundle/ruby/2.7.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:131:in `_query'
/opt/redmine/vendor/bundle/ruby/2.7.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:131:in `block in query'
/opt/redmine/vendor/bundle/ruby/2.7.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:130:in `handle_interrupt'
/opt/redmine/vendor/bundle/ruby/2.7.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:130:in `query'
/opt/redmine/vendor/bundle/ruby/2.7.0/gems/activerecord-5.2.7/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:187:in `block (2 levels) in execute'
/opt/redmine/vendor/bundle/ruby/2.7.0/gems/activesupport-5.2.7/lib/active_support/dependencies/interlock.rb:48:in `block in permit_concurrent_loads'
/opt/redmine/vendor/bundle/ruby/2.7.0/gems/activesupport-5.2.7/lib/active_support/concurrency/share_lock.rb:187:in `yield_shares'
/opt/redmine/vendor/bundle/ruby/2.7.0/gems/activesupport-5.2.7/lib/active_support/dependencies/interlock.rb:47:in `permit_concurrent_loads'
/opt/redmine/vendor/bundle/ruby/2.7.0/gems/activerecord-5.2.7/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:186:in `block in execute'
/opt/redmine/vendor/bundle/ruby/2.7.0/gems/activerecord-5.2.7/lib/active_record/connection_adapters/abstract_adapter.rb:581:in `block (2 levels) in log'
/opt/redmine/vendor/bundle/ruby/2.7.0/gems/activerecord-5.2.7/lib/active_record/connection_adapters/abstract_adapter.rb:580:in `synchronize'
/opt/redmine/vendor/bundle/ruby/2.7.0/gems/activerecord-5.2.7/lib/active_record/connection_adapters/abstract_adapter.rb:580:in `block in log'
/opt/redmine/vendor/bundle/ruby/2.7.0/gems/activesupport-5.2.7/lib/active_support/notifications/instrumenter.rb:23:in `instrument'
/opt/redmine/vendor/bundle/ruby/2.7.0/gems/activerecord-5.2.7/lib/active_record/connection_adapters/abstract_adapter.rb:571:in `log'
/opt/redmine/vendor/bundle/ruby/2.7.0/gems/activerecord-5.2.7/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:185:in `execute'
/opt/redmine/vendor/bundle/ruby/2.7.0/gems/activerecord-5.2.7/lib/active_record/connection_adapters/mysql/database_statements.rb:28:in `execute'
/opt/redmine/vendor/bundle/ruby/2.7.0/gems/activerecord-5.2.7/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:382:in `add_index'
/opt/redmine/vendor/bundle/ruby/2.7.0/gems/activerecord-5.2.7/lib/active_record/migration.rb:871:in `block in method_missing'
/opt/redmine/vendor/bundle/ruby/2.7.0/gems/activerecord-5.2.7/lib/active_record/migration.rb:840:in `block in say_with_time'
/opt/redmine/vendor/bundle/ruby/2.7.0/gems/activerecord-5.2.7/lib/active_record/migration.rb:840:in `say_with_time'
/opt/redmine/vendor/bundle/ruby/2.7.0/gems/activerecord-5.2.7/lib/active_record/migration.rb:860:in `method_missing'
/opt/redmine/plugins/full_text_search/db/migrate/20190728022920_mroonga_add_source_type_id_index_to_fts_targets.rb:6:in `change'

上記エラー発生直後のデータベースの確認内容

MariaDB [redmine]> SHOW ENGINES;
+--------------------+---------+-------------------------------------------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                                                         | Transactions | XA   | Savepoints |
+--------------------+---------+-------------------------------------------------------------------------------------------------+--------------+------+------------+
| CSV                | YES     | Stores tables as CSV files                                                                      | NO           | NO   | NO         |
| MRG_MyISAM         | YES     | Collection of identical MyISAM tables                                                           | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables                                       | NO           | NO   | NO         |
| Aria               | YES     | Crash-safe tables with MyISAM heritage. Used for internal temporary tables and privilege tables | NO           | NO   | NO         |
| MyISAM             | YES     | Non-transactional engine with good performance and small data footprint                         | NO           | NO   | NO         |
| SEQUENCE           | YES     | Generated tables filled with sequential values                                                  | YES          | NO   | YES        |
| Mroonga            | YES     | CJK-ready fulltext search, column store                                                         | NO           | NO   | NO         |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                                                              | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, foreign keys and encryption for tables                | YES          | YES  | YES        |
+--------------------+---------+-------------------------------------------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.000 sec)

MariaDB [redmine]> SHOW VARIABLES LIKE 'mroonga_version';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| mroonga_version | 12.02 |
+-----------------+-------+
1 row in set (0.001 sec)

以下のエラーメッセージの内容を元に

already used name was assigned: <fts_tags.index_fts_targets_on_tag_ids>: CREATE  INDEX `index_fts_targets_on_source_type_id`  ON `fts_targets` (`source_type_id`)

fts_tagsテーブルのインデックス確認したところ以下のエラーを確認

MariaDB [redmine]> SHOW INDEX FROM fts_tags;
ERROR 1016 (HY000): mroonga: failed to open table: <fts_tags>

予想している事象

マイグレーションが正常に終了し、プラグインのインストールが完了する

動作環境

補足事項

なお、通常は以下を利用し、Redmineのデモ環境を構築しようとしたところ、 その際に上記のエラーが発生したため、手動にて再現を行った内容が上記に記載したものです。

https://github.com/histudy/vagrant-redmine

Vagrant + VirtualBoxがインストールされている環境であれば、 上記リポジトリの内容をclone後、下記の内容を記述したextra_vars.ymlというファイルを設置し、 デモ環境を構築使用とすることで同じ事象を確認できると思われます。

redmine_plugins: 
  - name: full_text_search
    repo: https://github.com/clear-code/redmine_full_text_search.git
    directory: full_text_search

※ただし、上記のデモ環境構築用リポジトリの内容はWindows環境での動作確認は行っておりません

kou commented 2 years ago

ありがとうございます。再現しました。

MariaDB 10.5.14以降でALTER TABLE ADD INDEXがinplaceで実行されなくなっていることが原因で失敗していました。MariaDB 10.5.14以降でもinplaceで実行されるようにしたので今月末にリリースされる次のバージョンのMroongaでは動くはずです。

が、それまで待てないと思うのでこのプラグインのmasterを使えばそもそもALTER TABLE ADD INDEXが発生しないようにしておきました。これで今のMroongaでも動くはずです。

wate commented 2 years ago

@kou 対応ありがとうございます!