プロジェクト

全般

プロフィール

プラグインをgem化する

r2904 よりRedmineはgemでインストールしたプラグインを使えるようになりました。

プラグインをgemとしてインストールすることにより1台のサーバに複数のredmineを構築している場合でもそれぞれにプラグインを入れる必要がありません。また、プラグインのバージョンアップも非常に楽です。

gemでインストールしたプラグインをredmineにロードするためにはenvironment.rbに以下のように記述します。

Rails::Initializer.run do |config|
...
config.gem 'プラグイン名'
end

ではプラグインをgemに変換する方法です。jewelerというツールを使ってgemを作成する方法を説明します。

準備

以下の2つのツールがインストールされている必要があります。

  • jeweler
  • git

gitはリポジトリとしてgitを使っているかどうかにかかわらず必要です。jewelerが内部で使っているためです。

jewelerは以下のコマンドでインストールできます。

gem install jeweler

gitは本家 のサイトなどを参考にプラットフォームにあったものをインストールしてください。

Rakeファイルを作る

gem化したいプラグインのトップフォルダにRakefileがあれば、以下の記述を加えてください。無ければ新規にRakefileを作成してください。

#プラグイン名は適宜変えてください。
@plugin_name = 'code_review'

begin
  require 'jeweler'
  description = 'TODO'
  author = 'TODO'
  url = 'TODO'

  redmine_init_content = File.read('init.rb')
  if redmine_init_content.match(/description (.*$)/)
    description = $1.gsub("'",'').gsub('"','')
  end

  if redmine_init_content.match(/author (.*$)/)
    author = $1.gsub("'",'').gsub('"','')
  end

  if redmine_init_content.match(/[^ \t]*url ['"](.*)['"]/)
    url = $1
  end

  if redmine_init_content.match(/[^ \t]*url ['"](.*)['"]/)
    url = $1
  end

  Jeweler::Tasks.new do |s|
    s.name = "#{@plugin_name}" 
    s.summary = "#{description}" 
    s.homepage = "#{url}" 
    s.description = "#{description}" 
    s.authors = ["#{author}"]
    s.rubyforge_project = "#{@plugin_name}" # TODO
    s.files =  FileList[
      "[A-Z]*",
      "init.rb",
      "rails/init.rb",
      "{bin,generators,lib,test,app,assets,config,lang}/**/*",
      'lib/jeweler/templates/.gitignore'
    ]
  end
  Jeweler::GemcutterTasks.new
  Jeweler::RubyforgeTasks.new do |rubyforge|
    rubyforge.doc_task = "rdoc" 
  end

rescue LoadError
  puts "Jeweler, or one of its dependencies, is not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com" 
end

task "create-version" do
  # VERSION
  File.open('VERSION','w') do |version_file|
    redmine_init_content = File.read('init.rb')
    if redmine_init_content.match(/^[ \t]*version (.*$)/)
      version = $1.gsub("'",'').gsub('"','')
      version_file.puts version
    end
  end
end

task "create_init_rb_for_gem" do
  Dir.mkdir("rails") unless File.exist?("rails")
  FileUtils.cp "init.rb", "rails/init.rb" 
end

task "build-gem" => ["create-version", "create_init_rb_for_gem", "gemspec:generate", "gemspec:validate", "build"] do

end

そして以下のコマンドを実行してください。

rake build-gem

pkgというディレクトリの下にgemファイルができます。

また、gemをインストールする場合には

rake install

でインストールできます。