torutkのブログ

ソフトウェア・エンジニアのブログ

redmine trunkを落としてglossary pluginが動くか試してみる(続)

redmine trunkを落としてglossary pluginが動くか試してみる - torutkのブログ の続きです。
来るべきRedmine 4.0に備えて、Glossary Pluginが動作するかどうか(動作しないことが確認済み)、修正事項の調査をしています。

調査の詳細は、次の個人Redmineのチケットに記載中です。
http://www.torutk.com/issues/81

前回確認した要修正事項

  • Redmine 4.0(Ruby on Rials 5.1)で削除されたalias_method_chainを書き換える

先に進めてみる

Ruby on Rails 4.xまでの alias_method_chainは、ruby 2.0の標準機能 Module#prepend で書き換えるのだそうですが、書き換え方がよく分からず、当てずっぽうな修正で次に進んでみました。

マイグレーション時のエラー

すると、プラグインマイグレーションで新たなエラーが出ました。

StandardError: Directly inheriting from ActiveRecord::Migration is not supported. Please specify the Rails release the migration was written for:

  class CreateGlossaryStyles < ActiveRecord::Migration[4.2]

プラグインディレクトリのdb/migrate/下にあるコードではクラス宣言に

class CreateGlossaryStyles < ActiveRecord::Migration

と記述されていますが、ActiveRecord::Migrationを直接使うのはダメで、Railsのリリースバージョンを指定するのが必要なようです。

class CreateGlossaryStyles < ActiveRecord::Migration[5.1]
用語集メニュークリックでエラー

マイグレーションが実行できたので、Redmineを実行し、Glossary Pluginを使うプロジェクトを作成し、メニューの[用語集]をクリックしたところ次のエラーとなりました。*1

undefined method `before_filter' for GlossaryController:Class

Rails.root: /path/to/trunk
Application Trace | Framework Trace | Full Trace

plugins/redmine_glossary/app/controllers/glossary_controller.rb:7:in `<class:GlossaryController>'
plugins/redmine_glossary/app/controllers/glossary_controller.rb:2:in `<top (required)>'

before_filterは、プラグインを作成するときにほぼ必須の手段なので、なかなかに厳しい非互換なところです。

用語集の設定クリックでエラー

Redmineの[管理]>[プラグイン]で、Glossary Pluginの[設定]をクリックすると次のエラーとなりました。

undefined method `attr_accessible' for #<Class:0x00007fffc16dea70>

今回確認した要修正事項

  • db/migrate/の下のコードでは、ActiveRecord::Migrationを継承している宣言をActiveRecord::Migration[5.1]に修正する必要がある。
  • before_filterを使っているコードを何かに修正する必要がある
  • attr_accessibleを使っているコードを何かに修正する必要がある

その他

デフォルトで含まれるサーバーがWEBrickからPumaに変わっている模様

Redmineのtrunkをインストールしているときに、gemでpumaを取り込んでいるのが見えました。

プラグイン開発用の環境でRedmineの標準サーバーを起動すると、

$ bundle exec rails server -b 0.0.0.0
=> Booting Puma
=> Rails 5.1.6 application starting in development
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.11.4 (ruby 2.5.1-p57), codename: Love Song
* Min threads: 0, max threads: 16
* Environment: development
* Listening on tcp://0.0.0.0:3000
Use Ctrl-C to stop

とPumaが実行されました。

*1:パスの表記は長いので一部削除