MigrateToRM20

mikoto20000 edited this page Jun 18, 2012 · 9 revisions
Clone this wiki locally

Redmine2.0へのプラグインのマイグレーションについて

※ このページはPorting plugins to Redmine 2の情報と、ALMiniumプロジェクトでプラグインの移行を行なった経験をもとに作成さしました。Wikiなので、自由に追記などしてください。

Redmine 2.0.xにプラグインを移植するも参考になります。

Redmine2.0用にプラグインをマイグレーションした際のノウハウをメモしておきます。なお、Redmine 2.0からは、rake db:migrate_pluginsでプラグインのセットアップを行っていましたが、

$ RAILS_ENV=production rake redmine:plugins:migrate 

に変更になっているので注意してくださ~い。

require 'dispatcher'でエラーになる

問題となるコード

init.rbの中で、

require 'dispatcher'

Dispatcher.to_prepare :redmine_scm_plugin do
    ...
end

とDispatcherを利用するとエラーになります。

解決方法

次のようにRails.configuration.to_prepareを利用するように変更し、require文を削除します。

Rails.configuration.to_prepare do
    ...
end

content_tagがエラーになる

問題点

content_tagで追加したタグを画面に表示すると、Redmine2.0から自動的にエスケープされて表示され、正しくタグが表示されません。

解決方法

content_tag(:div, `<button>ここ押せワンワン</button>'.html_safe)

のように、html_safeを利用すると正しくタグが表示されるようになります。

ja.ymlが読み込まれない

問題点

ja.ymlが読み込まれず、ロケールがないというメッセージが表示される。

解決方法

Redmine2.0からプラグイン名とプラグインディレクトリが同じディレクトリである必要があります。 例えば、

Redmine::Plugin.register :redmine_scm_creator do
    name 'SCM Creator'
    ...
end

と記述されている場合、プラグインのフォルダ名をredmine_scm_creatorにする必要があります。

データベースのマイグレーションが実行されない

問題点

データベースのマイグレーションが実行されず、プラグインが正しく動作しません。

解決方法

上記の例と同じで、Redmine2.0からプラグイン名とプラグインディレクトリを同じディレクトリに配置してください。

Wikiのヘルプクラスの移動

Wikiのヘルプクラスをapp/helpersフォルダから、lib/フォルダの下に移動する必要があります。詳細は、redcarpet formatterのコード https://github.com/alminium/redcarpet_formatter のredmine-2.0.xブランチのコードをご覧ください。

RAILS_DEFAULT_LOGGERがエラーになる

問題となるコード

ログの出力方法が変更になりました。下記のコードはエラーとなります。

RAILS_DEFAULT_LOGGER.info("debug mesage")

解決方法

Rails.loggerを使ってください。

Rails.logger.info("debug message")

RAILS_ROOTがエラーになる

問題となるコード

    path = "#{RAILS_ROOT}/tmp/" + key

解決方法

RAILS_ROOTの代わりにRails.rootを利用します。

    path = "#{Rails.root}/tmp/" + key

ActionController::Routing:Routes.drawがエラーになる

問題点

Routingの定義がRedmine1.4.xで利用できる方法で定義するとエラーになります。

ActionController::Routing::Routes.draw do |map|
    map.connect 'users/get_avatar/:id', :controller => 'users', :action => 'get_avatar', :id=>/\d+/, :conditions => {:method => [:get, :post]}
end

解決方法

RedmineApp:Application.routesを利用してください。また、:viaにメソッドを指定します。

RedmineApp::Application.routes.draw do
     match 'avatar/get_avatars', :to => 'avatar#get_avatar'
end

オブサーバーの追加がエラーになる

問題点

オブサーバーの登録が従来の方法ではエラーになります。

    ActiveRecord::Base.observers << :repository_observer

解決方法

次のようにRails.configurationを利用して登録します。

    Rails.configuration.active_record.observers << :repository_observer

テンプレート名の変更

問題点

Redmine1.xまではテンプレート名として、

  • *.rhtml

が利用できました。Redmine2.0.xからは、

  • *.html.erb

というファイル名にする必要があります。ファイル名を変更してください。

String#eachがString#each_lineに変更

Ruby1.9.3では、Ruby1.8で使えたString#eachが使えません。代わりにString#each_lineを利用してください。

変更前

  @text.each do |line|
    ...
  end

変更後

  @text.each_line do |line|
    ...
  end

Redmine 2.0対応するのに参考となるコード

Redmine 2.0対応されたプラグインのリストをあげておくので、参考にしてください。

Redmine 2.0.x対応版ALMiniumの利用について

Redmine 2.0.x+Ruby1.9.3で動作させるのは面倒です。ALMiniumを利用すれば、一括セットアップしてくれます。下記の手順で、Redmine2.0.x版のALMiniumをインストールしてください(サポートプラットフォームは、CentOS6.2とUbuntu12.04)。

$ git clone https://github.com/alminium/alminium
$ cd alminium
$ git checkout redmine-2.0.x
$ sudo su - 
# bash smelt

Redmine 2.0対応版のALMiniumはまだ開発途上なのでご利用の際は注意してください。ALMiniumプロジェクトでは、ALMiniumの開発を手伝ってくれる人、宣伝くれる人を募集しています。是非ご参加ください!!