Project

General

Profile

気づき #755

PluginのRedmine本体バージョン間設計変更点収集(Redmine4/Rails5)

Added by 奈良 裕記 over 2 years ago. Updated 16 days ago.

Status:
新規
Priority:
通常
Assignee:
-
Category:
-
Target version:
Start date:
01/18/2018
Due date:
% Done:

0%

Estimated time:

Description

PluginのRedmine本体バージョン間設計変更点収集(Redmine4/Rails5)対応分

・Redmine3.x/Rails4分→ #751
・DB間差異箇所の対応(mysql/mariadb, postgresql)→ #1085

Redmineバージョン間の変更により、結果的にPluginに不具合が発生し、運用コストが増える事が良くあります。
(Redmine本体だけでなく、利用しているRuby,Rails,ライブラリ,DBMS側の変更を含む。)

本チケットは、そのようなロスを減らすために対応に必要な情報を収集蓄積するものです。
Rails5/Redmine4用に作成した機能のRails4/Redmine3環境backportも対象
RedmineはOSSですから、利用者は不具合を分析しソースレベルで修正し利用する自由があります。
対応方法が判れば、作者の修正待ちではなく、自分で修正し動かすことも可能。
(可能なら開発元にフィードバック)

記入項目(案)

  • 変更があったバージョン:項目名
  • Redmine本体側変更内容(RAILS.Ruby変更含)
  • Plugin側の変更方法、発生条件
  • 対応サンプル
  • 補足

関連資料

Rails アップグレードガイド
https://railsguides.jp/upgrading_ruby_on_rails.html

Redmine4時代のプラグイン開発
https://www.slideshare.net/douhashi/redmine4-redminetokyo-13
P55
Rails5で消えるAPI
before_filter after_filter
alias_method_chain

Redmine次期バージョン 4.0・4.1 とその先の未来像
https://www.slideshare.net/g_maeda/redmine-4041/g_maeda/redmine-4041

Redmine本家 Rails5 検索結果
http://www.redmine.org/projects/redmine/search?utf8=%E2%9C%93&q=Rails5&scope=&all_words=&all_words=1&titles_only=&issues=1&news=1&changesets=1&wiki_pages=1&messages=1&redmine_plugins=1&commit=%E9%80%81%E4%BF%A1

Redmine4.0.0 Roadmap
http://www.redmine.org/versions/99

Bitnami Redmine 3.4と4.0のDB変更点
https://qiita.com/8amjp/items/18395e96a5ea7d7ae21d

Rails 5 アップデートへの道
https://qiita.com/kenchan0130/items/f5ae55a6e23268238a44
(Rails4.2 -> 5.0への対応作業記録)

Rails 5.0.1 の変更点で個人的に気になったところ雑まとめ
http://upinetree.hatenablog.com/entry/2016/12/23/124212

Bitnami Redmine (Windows) 3.1.2→4.1.0の移行でハマった事
https://gourmet-technology-crypto.jp/%e6%8a%80%e8%a1%93/bitnami-redmine-windows-3-1-2%e2%86%924-1-0/
・0000-00-00 00:00:00のエラー
・既にインデックスが存在するエラー
・Redmine Knowledgebase Plugin/Mysql外部キーによる


テーブル設計変更内容

Bitnami Redmine 3.4と4.0のDB変更点

https://qiita.com/8amjp/items/18395e96a5ea7d7ae21d

  • auth_sourcesテーブルのverify_peerフィールド追加(LDAPS対応)

http://www.redmine.org/issues/29606

  • commentsテーブルのcomments→content変更

http://www.redmine.org/projects/redmine/repository/changes/branches/4.0-stable/db/migrate/20170723112801_rename_comments_to_content.rb

  • 日付型フィールドで型がdatetimeからtimestampに変更(多数)

Failed to run "rake db:migrate" command against clean database on MySQL 5.7
https://www.redmine.org/issues/27283


対応作業事例

Redmine 4.0(Rails 5.2)に用語集(Glossary)プラグインを対応させる

https://qiita.com/boochnich/items/3f190782f33835d05b2f

上記抜粋(詳細はリンク先参照)
  • alias_method_chainの削除 -> prepend
  • ActiveRecord::Migration -> Migration[4.2]
  • before_filterの削除 -> before_action
  • attr_accessibleの削除 -> ストロングパラメーター
  • acts_as_listの削除 -> gemで別途インストール
  • unable to convert unpermitted parameters to hash -> 明示的にハッシュに変換し、かつpermitを有効に
  • ActiveRecordのupdate_allの引数変更対応
  • ルーティングに:actionを使わない(Rails 6.0で削除)
対応項目 対応抜粋
alias_method_chainの削除 prependに変更
ActiveRecord::Migration Migration[4.2]
before_filterの削除 before_action
attr_accessibleの削除 ストロングパラメーター
acts_as_listの削除 gemで別途インストール
unable to convert unpermitted parameters to hash 明示的にハッシュに変換し、かつpermitを有効に
ActiveRecordのupdate_allの引数変更 引数変更
ルーティングに:actionを使わない
(SEC問題,Rails 6.0で削除)
ルーティング設定ではアクションを明示的に指定する。
routes.rbにて、matchではなく、get/post/patch個別に指定。

Redmine4.0:ActionView::Template::Error (super: no superclass method `project_settings_tabs'

本体側変更:

Plugin側の変更方法、発生条件

lib/Plugin名/projects_helper_patch.rb

From
ProjectsHelper.prepend Plugin名::ProjectsHelperPatch

To
ProjectsController.helper(Plugin名::ProjectsHelperPatch)

対応サンプル

https://github.com/akiko-pusu/redmine_issue_templates/issues/217
https://github.com/akiko-pusu/redmine_banner/issues/101
https://github.com/akiko-pusu/redmine_banner/pull/103/commits/15cda582f818991685e9e15f592e6b6e60c801da

DMSFでも同様の問題が発生していた模様

[WIP] Issue Template PluginのRails5対応作業追っかけ
https://github.com/akiko-pusu/redmine_issue_templates/pull/147


Redmine プラグインで controller を load すると別のプラグインに影響がある

https://suer.hatenablog.com/entry/2019/06/16/153409
(以下抜粋し一部意訳)
RAILS5では、 alias_method_chain の代わりに Module#prepend により既存の動作を上書きするが、
ロードする順番によっては上書き動作しない場合がある。
プラグインで Controller をロードすると後続で helper を prepend しても有効にならない
フォルダ名順にロードされるので、フォルダ名によって動いたり動かなかったりする。


jQuery アップデート対応

本体側変更:

Redmineで利用しているjQueryが古く、SEC面からも問題となっている。
Redmine4.1にて、jQuery 1.11.1→2.2.4 へのアップデート及び jQuery Migrate libraryの追加が行われた。機能変更/削除があり、これらへの対応が必要。
jQuery UI でも同様の変更が必要になる見込み

Plugin側の変更方法、発生条件

Updates jQuery to 2.2.4 and adds jQuery Migrate library
https://www.redmine.org/issues/31196
1.11.1→2.2.4 (4.1対応済)

Update jQuery UI to 1.12.1
https://www.redmine.org/issues/31887

jQuery UI 1.12 Upgrade Guide
https://jqueryui.com/upgrade-guide/1.12/

対応サンプル

option.attr('selected', true) → option.prop('selected', true);
$(window).load(function(){ → $(window).on('load', function(){


Redmine本体のバージョンを上げたら、translation missing エラーが発生する様になった。

本体側変更:

Redmine本体側で、不要になった用語定義を削除したため、Pluginの画面表示時にtranslation missing エラーが発生する様になった。

https://redmine.org/issues/33342

Plugin側の変更方法、発生条件

削除された用語定義を、Plugin側の用語定義に追加する。

基本的にはRedmine本体旧バージョンの用語ファイルのgrep結果をコピぺすれば良いが、
中国語やウムラウト記号などは文字化けする場合がある。
?表示については、Webブラウザでレポジトリの用語ファイルを参照し、確認/修正する必要がある。

修正し動作確認後に、オリジナルにPull-Requestする事が望ましい。

対応サンプル

対応作業例

https://github.com/deecay/redmine_pivot_table/issues/68

https://github.com/deecay/redmine_pivot_table/pull/70

以下独り言

本体側修正の影響回避のため、最初から自分の管理外の用語定義を利用しないという考え方もあるが、
利用者側には、本体/各Pluginで、同じ意味でもばらばらの用語が表示されることになる。

既存用語の削除は避けるべきとも考えられるが、多言語対応であり、49個の言語ファイルと1200超の用語定義がある現状では、不要な用語定義を減らしたい気持ちも判る。
全てのPluginの用語使用状況を確認する訳にもいかないし。

→発生したら対処するしかないかな。


その他

Rails5/Redmine4用に作成した機能のRails4/Redmine3環境対応も必要そう。
Redmine4がリリースされても、移行が順調に進むとは思えないので。

Too large avatar breaks gantt when assignee is a group
http://www.redmine.org/issues/28204
>The cause is that the HTML doesn't include "width" and "height" option

Rails 5.0から5.1へアップグレード時
Mysql2::Error: Table 'database.table_name' doesn't exist: SHOW FULL FIELDS FROM `table_name`
http://blog.digital-squad.net/article/450422548.html
>原因としてはRails 5.0から5.1へのアップデートでPrimary Keyカラムがintからbigintに変更されているので、
>5.0で作成したテーブルを参照する外部キーを含むマイグレーションを作成すると、
>もとのテーブルのIDがintであるのに対し、外部キーはbigintでミスマッチになるためエラーになるようだ。

Failed to run “rake db:migrate" command against clean database on MySQL5.7 under Redmine4.0 / Rails5
http://www.redmine.org/issues/27283

原因
Changed the default null value for timestamps to false".
http://guides.rubyonrails.org/5_0_release_notes.html

Rails側では現在対応予定無しの模様
https://github.com/rails/rails/issues/31804
https://github.com/rails/rails/pull/23553

This change is for dumping native timestamp types correctly which was introduced at #23553.

Historically, TIMESTAMP type has nonstandard behaviors for default values and NULL-value.
But the nonstandard behaviors are deprecated and will be removed in a future MySQL release.

So please enable explicit_defaults_for_timestamp on your server.


テンプレ

h2. Redmine4.0:エラーメッセージ概要

h3. 本体側変更:

h3. Plugin側の変更方法、発生条件

h3. 対応サンプル


Related issues

Related to Unofficial Redmine Cooking - 気づき #751: PluginのRedmine本体バージョン間設計変更点収集(Redmine3.x/Rails4) 新規01/14/2018

Actions
#1

Updated by 奈良 裕記 over 2 years ago

  • Related to 気づき #751: PluginのRedmine本体バージョン間設計変更点収集(Redmine3.x/Rails4) added
#2

Updated by 奈良 裕記 over 2 years ago

  • Description updated (diff)
#3

Updated by 奈良 裕記 over 2 years ago

  • Description updated (diff)
  • Target version set to 未解決
#4

Updated by 奈良 裕記 over 2 years ago

  • Description updated (diff)
#5

Updated by 奈良 裕記 over 2 years ago

  • Description updated (diff)
#6

Updated by 奈良 裕記 over 2 years ago

  • Description updated (diff)
#7

Updated by 奈良 裕記 over 2 years ago

  • Tracker changed from QA to 気づき
#8

Updated by 奈良 裕記 over 2 years ago

  • Description updated (diff)

Rails5/Redmine4用に作成したPluginのRails4/Redmine3環境対応も必要そう。
Redmine4がリリースされても、移行が順調に進むとは思えないので。

Too large avatar breaks gantt when assignee is a group
http://www.redmine.org/issues/28204
>The cause is that the HTML doesn't include "width" and "height" option
>because image_tag in Rails 4 doesn't accept an integer value for ":size" option
> (Rails 5 accepts both integer and string value, so the current trunk is not affected).

app/helpers/application_helper.rb
def avatar(user, options = { })の中で
options[:size]設定

#9

Updated by 奈良 裕記 about 2 years ago

  • Description updated (diff)
#10

Updated by 奈良 裕記 about 2 years ago

  • Description updated (diff)
#11

Updated by 奈良 裕記 about 2 years ago

  • Description updated (diff)
#12

Updated by 奈良 裕記 about 2 years ago

  • Description updated (diff)
#13

Updated by 奈良 裕記 almost 2 years ago

  • Description updated (diff)
#14

Updated by 奈良 裕記 over 1 year ago

  • Description updated (diff)
#15

Updated by 奈良 裕記 about 1 year ago

  • Description updated (diff)
#16

Updated by 奈良 裕記 about 1 year ago

  • Description updated (diff)
#17

Updated by 奈良 裕記 11 months ago

  • Description updated (diff)
#18

Updated by 奈良 裕記 11 months ago

  • Description updated (diff)
#19

Updated by 奈良 裕記 11 months ago

  • Description updated (diff)
#20

Updated by 奈良 裕記 11 months ago

  • Description updated (diff)
#21

Updated by 奈良 裕記 11 months ago

  • Description updated (diff)
#22

Updated by 奈良 裕記 11 months ago

  • Description updated (diff)
#23

Updated by 奈良 裕記 11 months ago

  • Description updated (diff)
#24

Updated by 奈良 裕記 9 months ago

  • Description updated (diff)
#25

Updated by 奈良 裕記 9 months ago

  • Description updated (diff)
#26

Updated by 奈良 裕記 9 months ago

  • Description updated (diff)
#27

Updated by 奈良 裕記 9 months ago

  • Description updated (diff)
#28

Updated by 奈良 裕記 9 months ago

ActionController::UnfilteredParameters (unable to convert unpermitted parameters to hash):

app/controllers/application_controller.rb:713:in `access_logging'

access_loggingで使用
req_param = params.to_unsafe_h.map {|key,value| "#{key} => #{value}"}.join(",")

(to_unsafe_hは本来好ましくない。permit処理を行うべきだが、元ソース変更を抑えたかったのでこの対応とした。)

関連
ActionController::Parameters がHash継承しなくなったこと、
https://github.com/rails/rails/pull/20868

#29

Updated by 奈良 裕記 6 months ago

4.0→4.1対応修正

デグレードはそれなりに発生している模様(あれだけ変更溜まれば当然)
https://www.redmine.org/projects/redmine/issues?fixed_version_id=160&set_filter=1&status_id=%2A&tracker_id=1

Redmineを4.0.5から4.1.0にアップデートした時の事
https://hanamiche.hatenablog.jp/entry/2020/01/17/171909

sprocketsについては、Redmine4.1以降で無効化する方向の様ですが、まだ動きがありそうです。

db:migrateで NoMethodError: undefined method `assets'

対処: require "sprockets/railtie”のコメントアウトを外す(有効化する)←変更可能性有
https://qiita.com/_y_s_k_w/items/5f42a4f66de5c3d07fe6

Redmine4.1でsprockets4.0自体を無効化している。assetsも使用しない方針かも。

https://www.redmine.org/issues/32223
・Gemfileからsprocketsを削除、
・application.rbにて、rails/allから個別指定に変更、assetsの指定を削除

https://redmine.org/issues/32839#note-1
下記等の対応を検討中
minimum required version of bundler to 1.15.2
または
gem 'sprockets', '~> 3.7.2' if RUBY_VERSION < '2.5'

db:migrateで Sprockets::Railtie::ManifestNeededError

(Sprockets有効化後の件、無効化している場合は発生しない)

対処: app/assets/config/manifest.js 作成し、link_tree他設定
https://qiita.com/kota-es/items/afdc1fb743408f4a5210

修正例(redmine_local_avatars)

https://github.com/taqueci/redmine_local_avatars/commit/9c5cd2c9d50ccfe3aca0584689db3fd98e9d5406

#30

Updated by 奈良 裕記 4 months ago

Redmineのチケット一覧で担当者のフィルターを追加できない(AgilePlugin(RedmineUp)とEasyGanttFree併用時)
plugin食い合わせによる既知不具合だった
alias_method_chain→base.prependで復旧

現象
https://teratail.com/questions/228766
修正方法
https://www.redmineup.com/projects/qa/questions/247-agile-plugin-doesn-t-work-with-easy-redmine-easy-gantt-plugin-and-etc

#31

Updated by 奈良 裕記 4 months ago

  • Description updated (diff)
#32

Updated by 奈良 裕記 16 days ago

  • Description updated (diff)
#33

Updated by 奈良 裕記 16 days ago

  • Description updated (diff)

Also available in: Atom PDF