気づき #755
openPluginのRedmine本体バージョン間設計変更点収集(Redmine4/Rails5/Ruby2.7)
0%
Description
PluginのRedmine本体バージョン間設計変更点収集(Redmine4/Rails5/Ruby2.7)対応分
・Redmine3.x/Rails4分→ #751
・Redmine5.x/Rails6分→ #1207
・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
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への対応作業記録)
Redmine プラグインチュートリアル for V4.x系
https://qiita.com/rbtgr/items/12a1f33361700359e235
プラグイン作成時期(Rails Ver差異)により、新規作成時のコードも異なる。
主にRedmine2/3間のコード差異部分を解説した記事(Redmine4分は本家のプラグインチュートリアル参照)
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変更
- 日付型フィールドで型が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を使わない (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 しても有効にならない
フォルダ名順にロードされるので、フォルダ名によって動いたり動かなかったりする。
The Proper Way to Add a Project Settings Tab for Your Redmine Plugin
https://jkraemer.net/2018/05/add-a-project-settings-tab-for-your-redmine-plugin
Prependを利用すると呼び出し順序に依存するので、それに代わる手法の提案
上記手法による、 Default Custom Query , DMSF の起動順番影響の対応報告
https://github.com/haru/redmine_wiki_extensions/issues/16#issuecomment-644162036
JQuery アップデート対応(Redmine4.2迄)¶
本体側変更¶
Redmineのjqueryは下記順序で変更されています。
Redmine4.0迄 | jquery-1.11.1-ui-1.11.0-ujs-5.2.3 | |
Redmine4.1/RedMica1.0/Redmica1.1 | jquery-2.2.4-ui-1.12.1-ujs-5.2.3 | r18363 |
Redmine4.2/RedMica1.2 | jquery-3.5.1-ui-1.12.1-ujs-5.2.3 | r19803 |
関連チケット
https://redmine.org/issues/31196 Updates jQuery to 2.2.4 and adds jQuery Migrate library
https://redmine.org/issues/33383 Update jQuery to 3.5.1
Plugin側の変更方法、発生条件¶
RedMica1.2にて、DMSF プラグインでアップロードの UI が動かなくなっている。(DMSF 2.4.5で確認)
詳細未確認、2021/2現在ではRedmine trunk/RedMica1.2上で動作確認可能。
【翻訳まとめ】jQuery 3.0 アップグレードガイド
https://qiita.com/fmy/items/345a264a1cf2e2a73f62
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(){
Redmine4.1 Tooltipの中で改行しなくなった¶
チケット表示画面でカスタムフィールドにマウスオンすると、カスタムフィールド定義の説明欄内容が表示される。
Redmine4.0までは説明欄の改行が反映されていたが、Redmine4.1では改行されなくなった
本体側変更:¶
Webブラウザのtooltip機能から、JQuery利用に変更したため発生した現象。(本家31441)
31441の変更ではtitle指定されているので、JQuery側は改行しないのが当然の動作と思われる。
改行対応に対して本家チケット34834が起票されたので、上記修正をコメントした。
https://redmine.tokyo/issues/1203
Show elements titles using jQuery UI tooltips
https://www.redmine.org/issues/31441
unofficial-redmine (4.2-stable ベース)に取込済
https://github.com/y503unavailable/redmine/issues/41
対応¶
対応パッチ作成済
https://redmine.tokyo/issues/1203#%E8%A7%A3%E6%B1%BA%E7%AD%96
本家チケット34834が起票されたので、本修正をコメントした。いずれ何等かの修正されると思われる。
https://www.redmine.org/issues/34834#note-2
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の用語使用状況を確認する訳にもいかないし。
→発生したら対処するしかないかな。
Ruby2.7以降関連¶
本体側変更:¶
Rdemine本体は4.2でRuby2.7対応となったが、Pluginは完全に対応完了しておらず障害発生する場合がある。
Redmine本体のRuby2.7対応変更は下記参照
Ruby 2.7 support
https://redmine.org/issues/31500
Plugin側の変更方法、発生条件¶
対応サンプル¶
WikiListsのRuby2.7対応修正
https://github.com/tkusukawa/redmine_wiki_lists/commit/be4a5d591fcdf2afb45316e77d63ca85297a2ac1
Ruby 2.3上のRedmineで作成した "α" で始まるWikiページが Ruby 2.4以降の上で動くRedmineだと開けない。¶
https://twitter.com/g_maeda/status/1521042750191267841
原因:¶
Ruby2.4にて、String#capitalize が非ASCIIの文字も変換する様に仕様変更されたため。
Add non-ASCII case conversion to String#upcase/downcase/swapcase/capitalize
https://bugs.ruby-lang.org/issues/10085
非ASCII文字でも小文字化、大文字化されるようになった
その他¶
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. 対応サンプル
Updated by 奈良 裕記 over 4 years ago
- Related to 気づき #751: PluginのRedmine本体バージョン間設計変更点収集(Redmine3.x/Rails4) added
Updated by 奈良 裕記 over 4 years ago
- Description updated (diff)
- Target version set to 未解決
Updated by 奈良 裕記 over 4 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]設定
Updated by 奈良 裕記 over 2 years 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
Updated by 奈良 裕記 over 2 years 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
Updated by 奈良 裕記 about 2 years 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
Updated by 奈良 裕記 about 1 year ago
- Subject changed from PluginのRedmine本体バージョン間設計変更点収集(Redmine4/Rails5) to PluginのRedmine本体バージョン間設計変更点収集(Redmine4/Rails5/Ruby2.7)
- Description updated (diff)