プラグインをgem化する » 履歴 » バージョン 1
Haru Iida, 2009/10/24 08:04
1 | 1 | Haru Iida | h1. プラグインをgem化する |
---|---|---|---|
2 | |||
3 | "r2904":http://www.redmine.org/projects/redmine/repository/revisions/2904 よりRedmineはgemでインストールしたプラグインを使えるようになりました。 |
||
4 | |||
5 | プラグインをgemとしてインストールすることにより1台のサーバに複数のredmineを構築している場合でもそれぞれにプラグインを入れる必要がありません。また、プラグインのバージョンアップも非常に楽です。 |
||
6 | |||
7 | gemでインストールしたプラグインをredmineにロードするためにはenvironment.rbに以下のように記述します。 |
||
8 | |||
9 | <pre><code class="Ruby"> |
||
10 | Rails::Initializer.run do |config| |
||
11 | ... |
||
12 | config.gem 'プラグイン名' |
||
13 | end |
||
14 | </code></pre> |
||
15 | |||
16 | ではプラグインをgemに変換する方法です。jewelerというツールを使ってgemを作成する方法を説明します。 |
||
17 | |||
18 | h2. 準備 |
||
19 | |||
20 | 以下の2つのツールがインストールされている必要があります。 |
||
21 | |||
22 | * jeweler |
||
23 | * git |
||
24 | |||
25 | gitはリポジトリとしてgitを使っているかどうかにかかわらず必要です。jewelerが内部で使っているためです。 |
||
26 | |||
27 | jewelerは以下のコマンドでインストールできます。 |
||
28 | |||
29 | <pre> |
||
30 | gem install jeweler |
||
31 | </pre> |
||
32 | |||
33 | gitは"本家":http://git-scm.com/ のサイトなどを参考にプラットフォームにあったものをインストールしてください。 |
||
34 | |||
35 | h2. Rakeファイルを作る |
||
36 | |||
37 | gem化したいプラグインのトップフォルダにRakefileがあれば、以下の記述を加えてください。無ければ新規にRakefileを作成してください。 |
||
38 | |||
39 | <pre><code class="Ruby"> |
||
40 | #プラグイン名は適宜変えてください。 |
||
41 | @plugin_name = 'code_review' |
||
42 | |||
43 | begin |
||
44 | require 'jeweler' |
||
45 | description = 'TODO' |
||
46 | author = 'TODO' |
||
47 | url = 'TODO' |
||
48 | |||
49 | redmine_init_content = File.read('init.rb') |
||
50 | if redmine_init_content.match(/description (.*$)/) |
||
51 | description = $1.gsub("'",'').gsub('"','') |
||
52 | end |
||
53 | |||
54 | if redmine_init_content.match(/author (.*$)/) |
||
55 | author = $1.gsub("'",'').gsub('"','') |
||
56 | end |
||
57 | |||
58 | if redmine_init_content.match(/[^ \t]*url ['"](.*)['"]/) |
||
59 | url = $1 |
||
60 | end |
||
61 | |||
62 | if redmine_init_content.match(/[^ \t]*url ['"](.*)['"]/) |
||
63 | url = $1 |
||
64 | end |
||
65 | |||
66 | Jeweler::Tasks.new do |s| |
||
67 | s.name = "#{@plugin_name}" |
||
68 | s.summary = "#{description}" |
||
69 | s.homepage = "#{url}" |
||
70 | s.description = "#{description}" |
||
71 | s.authors = ["#{author}"] |
||
72 | s.rubyforge_project = "#{@plugin_name}" # TODO |
||
73 | s.files = FileList[ |
||
74 | "[A-Z]*", |
||
75 | "init.rb", |
||
76 | "rails/init.rb", |
||
77 | "{bin,generators,lib,test,app,assets,config,lang}/**/*", |
||
78 | 'lib/jeweler/templates/.gitignore' |
||
79 | ] |
||
80 | end |
||
81 | Jeweler::GemcutterTasks.new |
||
82 | Jeweler::RubyforgeTasks.new do |rubyforge| |
||
83 | rubyforge.doc_task = "rdoc" |
||
84 | end |
||
85 | |||
86 | rescue LoadError |
||
87 | puts "Jeweler, or one of its dependencies, is not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com" |
||
88 | end |
||
89 | |||
90 | task "create-version" do |
||
91 | # VERSION |
||
92 | File.open('VERSION','w') do |version_file| |
||
93 | redmine_init_content = File.read('init.rb') |
||
94 | if redmine_init_content.match(/^[ \t]*version (.*$)/) |
||
95 | version = $1.gsub("'",'').gsub('"','') |
||
96 | version_file.puts version |
||
97 | end |
||
98 | end |
||
99 | end |
||
100 | |||
101 | task "create_init_rb_for_gem" do |
||
102 | Dir.mkdir("rails") unless File.exist?("rails") |
||
103 | FileUtils.cp "init.rb", "rails/init.rb" |
||
104 | end |
||
105 | |||
106 | task "build-gem" => ["create-version", "create_init_rb_for_gem", "gemspec:generate", "gemspec:validate", "build"] do |
||
107 | |||
108 | end |
||
109 | </code></pre> |
||
110 | |||
111 | そして以下のコマンドを実行してください。 |
||
112 | |||
113 | <pre> |
||
114 | rake build-gem |
||
115 | </pre> |
||
116 | |||
117 | pkgというディレクトリの下にgemファイルができます。 |
||
118 | |||
119 | また、gemをインストールする場合には |
||
120 | |||
121 | <pre> |
||
122 | rake install |
||
123 | </pre> |
||
124 | |||
125 | でインストールできます。 |