ラベル redmine の投稿を表示しています。 すべての投稿を表示
ラベル redmine の投稿を表示しています。 すべての投稿を表示

2014/09/11

さくらVPSの Ubuntu12.04 を 14.04 にした

さくらVPSにログインするとアップグレードできるよって通知が出ていたので、14.04 にアップグレードしやした。
盛大にハマった....

コマンド叩く

$ do-release-upgrade
The upgrade has aborted. The upgrade needs a total of 55.6 M free space on disk '/boot'. Please free at least an additional 12.7 M of disk space on '/boot'. Empty your trash and remove temporary packages of former installations using 'sudo apt-get clean'.
いきなり容量が足りないときた。
/boot以下のファイルのうち、最新バージョン以外を削除して再度実行すればOKだった。
何度か、設定ファイルなどを最新のに上書きするかい?って聞かれるけど、おこのみで。
しないほうが無難だとは思う。

バージョンの確認

git はソースから入れた 2.1.0 のまま。
前回と同じくRubyはリポジトリのものに置き換えられて 1.9.3 になっていたので入れ替えた。
$ mv /usr/bin/erb{,.bak}
$ mv /usr/bin/gem{,.bak}
$ mv /usr/bin/irb{,.bak}
$ mv /usr/bin/rake{,.bak}
$ mv /usr/bin/rdoc{,.bak}
$ mv /usr/bin/ri{,.bak}
$ mv /usr/bin/ruby{,.bak}
$ mv /usr/bin/testrb{,.bak}
$ ln -sfn /opt/ruby/ruby-2.1.2/bin/* /usr/bin
ようやく Ubuntu でも 1.9.3 がデフォルトになったのか。めでたい。

Passengerのアップデート

Apacheのバージョンが上がったので、Passenger も再インストール。
$ gem install passenger
/opt/ruby/ruby-2.1.2/bin/passenger-install-apache2-module を実行 * To install Apache 2 development headers: Please install it with apt-get install apache2-threaded-dev * To install Apache Portable Runtime (APR) development headers: Please install it with apt-get install libapr1-dev * To install Apache Portable Runtime Utility (APU) development headers: Please install it with apt-get install libaprutil1-dev
言われるままにインストールする。
$ aptitude install apache2-threaded-dev libapr1-dev libaprutil1-dev
passengerモジュールをインストール。
$ passenger-install-apache2-module
apache2: Syntax error on line 140 of /etc/apache2/apache2.conf: Syntax error on line 1 of /etc/apache2/mods-enabled/passenger.load: Cannot load /opt/ruby/ruby-2.1.2/lib/ruby/gems/2.1.0/gems/passenger-4.0.45/buildout/apache2/mod_passenger.so into server: /opt/ruby/ruby-2.1.2/lib/ruby/gems/2.1.0/gems/passenger-4.0.45/buildout/apache2/mod_passenger.so: undefined symbol: unixd_config apache2: Syntax error on line 140 of /etc/apache2/apache2.conf: Syntax error on line 1 of /etc/apache2/mods-enabled/passenger.load: Cannot load /opt/ruby/ruby-2.1.2/lib/ruby/gems/2.1.0/gems/passenger-4.0.45/buildout/apache2/mod_passenger.so into server: /opt/ruby/ruby-2.1.2/lib/ruby/gems/2.1.0/gems/passenger-4.0.45/buildout/apache2/mod_passenger.so: undefined symbol: unixd_config Your Apache installation might be broken
なぜかビルド出来ない。調べてみると unixd_config は ap_unixd_config にリネームされたらしいが、決定的な情報が出てこず、ハマる。悩む。
で、よーーーーーーーーく考えてみると、passenger.load でエラーが出ているけど、新しい passenger 入れるんだからいらんだろ!ということで、passenger.load と passenger.conf の中身をコメントアウトしたらビルド通った。

Redmine

前回のアップグレードでは、RMagicがおかしなことになっていたので、確認してみる。
RMagic とか Redmine 以前に、ERR_SSL_PROTOCOL_ERROR とか言われて接続できていないんですけどー。
/etc/apache2/sites-available/default-ssl.conf から /etc/apache2/sites-enabled/000-default-ssl.conf とかシンボリックリンクを貼ると Redmine ではなくデフォルトページだが表示されるので、Redmine 用の設定が読み込まれていないっぽい。
調べてみると server - Why not work Apache virtual hosts on Ubuntu 14.04? - Ask Ubuntu がヒット。
Apache2.4から .conf 拡張子が必要になったらしい。
$ rm /etc/apache2/sites-enabled/001-redmine
$ mv /etc/apache2/sites-available/redmine{,.conf}
$ ln -s /etc/apache2/sites-available/redmine.conf /etc/apache2/sites-enabled/001-redmine.conf
$ service apache2 restart
AH00548: NameVirtualHost has no effect and will be removed in the next release /etc/apache2/sites-enabled/001-redmine.conf:1
ちゃんと読み込まれたらしい。警告が出たので、対応もした。

再度アクセスしたら、今度は You don't have permission to access / on this server. とか言われる。今まではこれで動いとってん!
/var/log/apache2/error.log には AH01630: client denied by server configuration: /var/lib/rails/redmine/public と出力されている。
redmine.conf にパーミッション設定をすればよさげ。
<VirtualHost *:443>
  ServerName xxx.mkt-sys.jp:443
  DocumentRoot /var/lib/rails/redmine/public
  <Directory /var/lib/rails/redmine/public/>
    Options FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
  </Directory>
  SSLCertificateFile    /etc/apache2/cert/ssl-cert.pem
  SSLCertificateKeyFile /etc/apache2/cert/ssl-cert.key
  PassengerEnabled on
</VirtualHost>
しかし、これでも動かない。わけわからん。
ここで再びネットの海を彷徨い おほ。2.4系じゃ .htaccess ファイルの許可の仕方も変わってるんだなあ - 電気ウナギ的○○ を発見する。
<VirtualHost *:443>
  ServerName xxx.mkt-sys.jp:443
  DocumentRoot /var/lib/rails/redmine/public
  <Directory /var/lib/rails/redmine/public/>
    Options FollowSymLinks
    AllowOverride None
    Require all granted
  </Directory>
  SSLCertificateFile    /etc/apache2/cert/ssl-cert.pem
  SSLCertificateKeyFile /etc/apache2/cert/ssl-cert.key
  PassengerEnabled on
</VirtualHost>
とせんとイカンらしい。これでようやくRedmineが表示された。

ImageMagickとRMagick

Redmineを確認すると案の定下記の ImageMagick 関連がエラーになっていた。
  • RMagickが利用可能 (オプション)
  • ImageMagickのconvertコマンドが利用可能 (オプション)
前回の用にソースから再度ビルドしてもいいのだが、どうやら apt に入っている ImageMagick も新しくなって、RMagick をすんなり入れられるらしいので、入れ替える。
/usr/bin から ImageMagick 関連のシンボリックリンクを削除した後に ImageMagick と RMagick を入れ替える。
$ aptitude install imagemagick libmagick++-dev
$ cd /var/lib/rails/redmine
$ bundle exec gem uninstall rmagick
$ bundle install
これで、"ImageMagickのconvertコマンドが利用可能 (オプション)" は解決。
RMagick については以前の経験により調査する。
$ bundle exec rails c production
irb(main):001:0> require 'RMagick'
LoadError: liblcms.so.1: cannot open shared object file: No such file or directory - /var/lib/rails/redmine-2.5.2/vendor/bundle/ruby/2.1.0/extensions/x86_64-linux/2.1.0-static/rmagick-2.13.2/RMagick2.so from /var/lib/rails/redmine-2.5.2/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.19/lib/active_support/dependencies.rb:251:in `require' from /var/lib/rails/redmine-2.5.2/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.19/lib/active_support/dependencies.rb:251:in `block in require' from /var/lib/rails/redmine-2.5.2/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.19/lib/active_support/dependencies.rb:236:in `load_dependency' from /var/lib/rails/redmine-2.5.2/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.19/lib/active_support/dependencies.rb:251:in `require' from /var/lib/rails/redmine-2.5.2/vendor/bundle/ruby/2.1.0/gems/rmagick-2.13.2/lib/RMagick.rb:11:in `<top (required)>' from /var/lib/rails/redmine-2.5.2/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.19/lib/active_support/dependencies.rb:251:in `require' from /var/lib/rails/redmine-2.5.2/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.19/lib/active_support/dependencies.rb:251:in `block in require' from /var/lib/rails/redmine-2.5.2/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.19/lib/active_support/dependencies.rb:236:in `load_dependency' from /var/lib/rails/redmine-2.5.2/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.19/lib/active_support/dependencies.rb:251:in `require' from (irb):1 from /var/lib/rails/redmine-2.5.2/vendor/bundle/ruby/2.1.0/gems/railties-3.2.19/lib/rails/commands/console.rb:47:in `start' from /var/lib/rails/redmine-2.5.2/vendor/bundle/ruby/2.1.0/gems/railties-3.2.19/lib/rails/commands/console.rb:8:in `start' from /var/lib/rails/redmine-2.5.2/vendor/bundle/ruby/2.1.0/gems/railties-3.2.19/lib/rails/commands.rb:41:in `<top (required)>' from script/rails:6:in `require' from script/rails:6:in `<main>'
liblcms.so.1 が見つからないらしい。locate しても確かにいない。
apt で入れたのに、ライブラリ足りないってどーゆーことよ。
依存関係を調べてみる。
$ ldd vendor/bundle/ruby/2.1.0/gems/rmagick-2.13.2/lib/RMagick2.so
linux-vdso.so.1 => (0x00007fff01ffe000) libMagickCore.so.5 => /usr/local/lib/libMagickCore.so.5 (0x00007f6be578c000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f6be556e000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f6be5267000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f6be4ea1000) liblcms.so.1 => not found libtiff.so.4 => not found libfreetype.so.6 => /usr/lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007f6be4bfd000) libjasper.so.1 => /usr/lib/x86_64-linux-gnu/libjasper.so.1 (0x00007f6be49a6000) libjpeg.so.62 => /usr/lib/x86_64-linux-gnu/libjpeg.so.62 (0x00007f6be4780000) libpng12.so.0 => /lib/x86_64-linux-gnu/libpng12.so.0 (0x00007f6be455a000) libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6 (0x00007f6be4348000) libSM.so.6 => /usr/lib/x86_64-linux-gnu/libSM.so.6 (0x00007f6be413f000) libICE.so.6 => /usr/lib/x86_64-linux-gnu/libICE.so.6 (0x00007f6be3f23000) libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007f6be3bee000) libbz2.so.1.0 => /lib/x86_64-linux-gnu/libbz2.so.1.0 (0x00007f6be39dd000) libxml2.so.2 => /usr/lib/x86_64-linux-gnu/libxml2.so.2 (0x00007f6be3677000) libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f6be345e000) libgomp.so.1 => /usr/lib/x86_64-linux-gnu/libgomp.so.1 (0x00007f6be324e000) libltdl.so.7 => /usr/lib/x86_64-linux-gnu/libltdl.so.7 (0x00007f6be3044000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f6be2e40000) /lib64/ld-linux-x86-64.so.2 (0x00007f6be607c000) libjpeg.so.8 => /usr/lib/x86_64-linux-gnu/libjpeg.so.8 (0x00007f6be2bea000) libuuid.so.1 => /lib/x86_64-linux-gnu/libuuid.so.1 (0x00007f6be29e5000) libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f6be27c5000) liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007f6be25a3000) libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007f6be239e000) libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f6be2198000)
なんと liblcms.so.1 だけでなく、libtiff.so.4 も見つからないらしい。おろろーん。
aptitude でみてみると libtiff5 や libcmls2 は入っている。
lrwxrwxrwx 1 root root     17 Jan 16  2014 /usr/lib/x86_64-linux-gnu/liblcms2.so -> liblcms2.so.2.0.5
lrwxrwxrwx 1 root root     17 Jan 16  2014 /usr/lib/x86_64-linux-gnu/liblcms2.so.2 -> liblcms2.so.2.0.5
-rw-r--r-- 1 root root 346928 Jan 16  2014 /usr/lib/x86_64-linux-gnu/liblcms2.so.2.0.5
# 省略
lrwxrwxrwx 1 root root     16 May  6 04:39 /usr/lib/x86_64-linux-gnu/libtiff.so -> libtiff.so.5.2.0
lrwxrwxrwx 1 root root     16 May  6 04:39 /usr/lib/x86_64-linux-gnu/libtiff.so.5 -> libtiff.so.5.2.0
-rw-r--r-- 1 root root 467208 May  6 04:39 /usr/lib/x86_64-linux-gnu/libtiff.so.5.2.0
ライブラリのファイルもあるので、多少バージョンが違うかもしれないが強引にこれらにリンクさせてみる。
$ cd /usr/lib/x86_64-linux-gnu/
$ ln -s liblcms2.so liblcms.so.1
$ ln -s libtiff.so.5 libtiff.so.4
Redmine を再起動して確認してみると、"ImageMagickのconvertコマンドが利用可能 (オプション)" もOKマークに変わっている。
念のため、動かしてみる。
Redmine では、RMagick はガントチャートの PNG のために使用されているので、PNG 表示してみると無事に表示されたが、日本語が文字化けした。
ガントチャートをPNG形式の画像に出力すると文字化けする — Redmine.JP によると、日本語フォントを設定しないといけないらしい。
そもそもインストールしていないのでインストールして設定する。
$ aptitude install fonts-ipaexfont
$ vim /var/lib/rails/redmine/config/configration.yml
#=> rmagick_font_path に /usr/share/fonts/truetype/fonts-japanese-gothic.ttf を指定
するとすんなり PNG でも日本語が表示された。
ということで、とりあえず問題は解決したと思われる。
しかし、もっと本質的な解決方法があると思うなぁ、でも疲れたので今回はここまで。
前回より苦戦しないかと思ったらとんでもない、ドはまりしてだいぶ時間がかかった。

2014/08/03

Redmineプラグイン開発における ActiveModel 使用上の注意点

先のエントリ: tail -f pinzo.log: ActiveSupport::Concern の included と ClassMethods の順序 に関連してます。

Redmine のプラグインでちょっと凝ったことをしようとすると、ActiveModel を使いたくなることがある。
ActiveModel のメリットの一つに ActiveRecord と同様のバリデーションを手軽に定義できることがある。
しかし、Redmine 本体の locales/ja.yml には ActiveModel の設定は入っていないので、プラグインの locales/ja.yml に書くことになる。
その際、たいてい Redmine 本体の locales/ja.yml から ActiveRecord 用の設定をコピーしてくることになりがち。 こんな感じに。

ここまではいい。

問題は、ここからちょいと修正を入れてしまうことにある。
ちょっと文言をいじってしまうと ActiveModel のデフォルトの文言を上書きするということになる。
これを複数プラグインでやってしまった場合、さてあなたのプラグインではどんなエラーが表示されるだろう?
これらの辞書ファイルはマージされるので、ロード順や入れてあるプラグインの状態により変わってしまい想定できなくなる。
文言をテストで使用していたりしたら、テストが失敗してしまう。
それを避けるためにも、先のエントリで書いたようなテクニックを利用して、自分のプラグインの ActiveModel が使用するセクションを独立させてあげよう。
こんな感じに。(my_plugin 部分にはあなたのプラグインの一意な識別子を指定しましょう。)

それでは、今日もよい日曜開発を

2014/07/15

Redmine 2.5.0 からプラグインでの文言上書きが復活しています

Redmine 2.3, 2.4 のころはプラグインで登録した locales よりも、本体の locales が load_path での優先度が高く、tail -f pinzo.log: Redmineのプラグインで既存の文言を上書きする みたいなことをしないと、文言を上書きできませんでした。
しかし、Redmine 2.5 からプラグインが読み込まれると、本体の locales よりも優先度が高くなるように load_path に登録されるため、特に何もせずに上書きされるようになっています。
コレが関連のチケット → Patch #12753: Update config.i18n.load_path for plugin-supplied locales - Redmine
I18n.load_path でなく Rails.application.config.i18n.load_path に追加すると。なるほど

Vagrant で Bitnami Redmine の環境を作る

検証環境として Vagrant 上に bitnami redmine を構築したのでメモ。

Vagrant

% vagrant box add centos65 https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box
% vagrant init centos65
これで Vagrantfile が作成されたので少し編集。
起動して最新状態にしておく
% vagrant up
% vagrant ssh
$ sudo yum check-update
$ sudo yum update

Bitnami のインストール

$ sudo yum install wget
# 公式サイトでは 32bit が Recommended されているが、こっちでないと動かない
$ wget https://bitnami.com/redirect/to/38030/bitnami-redmine-2.5.2-0-linux-x64-installer.run
$ chmod 775 bitnami-redmine-2.5.2-0-linux-x64-installer.run
$ sudo ./bitnami-redmine-2.5.2-0-linux-x64-installer.run
ウィザード形式でインストールが完了するが、最初に英語を選ばないと、表示が怪しい

Redmine を自動起動に

$ sudo cp /opt/redmine-2.5.2-0/ctlscript.sh /etc/init.d/bitnami-redmine
$ sudo vi /etc/init.d/bitnami-redmine
こちらを参考に少しスクリプトを編集
$ chkconfig --add bitnami-redmine # ついでに起動しておく $ sudo sh /etc/init.d/bitnami-redmine

アクセス

いちいち ip 打つのはめんどくさいので hosts に 192.168.33.10 vm を追加して、http://vm/redmine にアクセス。
無事表示された。
こんな感じ。さすが All in one、かなりフルで入る。

2014/07/14

RxTstudy 11th で発表してきました

先日 7/12 に大阪で行われた RxTstudy 11th で一時間ほどセッションしてきました。
初の長時間セッションということで、資料作成時にどれぐらいの分量を書けばいいかわからず、時間が余った時のためにおまけネタも用意していたのですが、ちょうどいい感じで終われたので安心しました。
使わなかったおまけネタは今度どこかの LT ででも発表したいと思います。

スライドはこちら。 スライドだけではニュアンスが伝わらない部分が結構あると思いますが、@akahane92 さんが録画してくださってていて、そのうちアップされると思いますので、そちらを御覧ください。
その他のスライドや全体の感想などは @akipiiさんの第11回RxTstudy勉強会「Redmine Plugin 活用最前線」の感想~今後の課題はRedmineのエコシステムの創造 #RxTStudy: プログラマの思索にまとまっています。

以下、今回の私的な感想やフォローです。
  • 今回のRxTstudy はセッションは2つと少なめですが、どちらも一時間の長めのセッションであり、パネルディスカッションもあったので結構ボリュームも有り、人によっては疲れたかもしれません。
  • プラグインを作り始めてまだ日の浅い私と違い、@haru_iidaさんの経験からくるお話が非常に勉強になりました。
  • いくつかで、Redmine 本体のテスト実行に2,3時間という話が出ていますが、こんな感じのビルドマトリクスを Travis-CI で走らせた場合、Travisの状況によっては二時間後ぐらいに全部終わった通知が来ることもあるということです。ローカルで rake ci する分には 10〜20分足らずで終わります。
  • 私が言及した Redmine とプラグインを取り囲むエコシステムの欠乏というのがひとつの大きな主題となって「価値のある発表ができたな」という自己満足感があったw
  • プラグインを利用したRedmineの情報集約能力は非常に高いと思うのでお勧めですよ
  • Redmine環境の構築、プラグインの導入の敷居はまだまだ高いらしい。プラグイン作りまくったり自分で環境立ちあげたりしているとその辺りの感覚が薄れてしまうので、それらを考慮した開発をこれからも心がけたい
ほんまこれ

2014/07/09

Redmine2.5.2のプラグインアップデート確認機能が使えない

前回のエントリで、せっかく新機能として追加されたプラグインアップデートの確認機能ですが、VPS 上の Redmine では失敗する。
ブラウザの開発ツールを使えば原因は一目瞭然。
アクセス先の URL がベタ書きなので、Redmine を HTTPS 運用していても http://www.redmine.org/plugins/check_updates にアクセスしてしまい、セキュリティ上ブロックされてしまう。
上の画像からそもそもリクエストを発行すらしていないことがわかる。
じゃあ、https にアクセスすればいいんじゃね?と app/views/admin/plugins.html.erb を修正してみる。
// 修正前
dataType: "jsonp",
url: "http://www.redmine.org/plugins/check_updates",
data: <%= raw_json plugin_data_for_updates(@plugins) %>,
// 修正後
dataType: "jsonp",
url: "//www.redmine.org/plugins/check_updates",
data: <%= raw_json plugin_data_for_updates(@plugins) %>,
そうすると今度は別のエラーが発生する。
リクエストは正常に発行されているが、500エラーが返ってくる。
それも当然で、https://www.redmine.org というのはどうも SVN の WebDAV アクセスで使用されているっぽい。
ちなみに直接アクセスしてみるとこんな画面になる。

これどうすんだろ?Redmine を HTTPS 運用しているのは結構多いと思うんだが、このままではこの機能を利用することはできない。
SVN のリポジトリの URL を今更変えるというのも大変だろうし。
別の URL で API を提供するのがいいんじゃねーかな?http://api.redmine.org と https://api.redmine.org みたいな感じで。

[追記]
ちなみにエラーになるのは Google chrome と Firefox で Opera と Safari は正常に機能しました。
IEでは初回に警告がでるものの「すべてのコンテンツを表示」をクリックすれば実行可能。

Redmine 2.5.2 へアップデート

さくらVPSの Redmine を 2.5.2 にアップデート。
毎回同じことやっているので、スクリプト化。
一発成功。
余程の大きく破壊的なバージョンアップでない限りコレで行けるはず。

せっかくなので、新機能のプラグインバージョンチェックを試してみると...
むむむむ、調査せねば

2014/06/18

redmine_reminderz

pinzolo/redmine_reminderz という Redmine のプラグインを作った。
Redmineには締め切りの近いチケットを通知する redmine:send_reminders というRakeタスクがあるが、今のプロジェクトでは進捗率80%以上のチケットはレビュー待ちなので担当者にリマインダーとして送りたくないらしい。
多分 Redmine の運用方針を変えればカバーできる話だが、Redmineをそんなにガシガシと使いこなしているわけでもないし、プロジェクト的にそこまでの余裕もない。
というわけで、進捗率でフィルタできるオプションを追加したタスクをプラグインとして作成した。
タスク名を redmine:send_reminders から redmine:send_reminderz に変更するだけ(最後のsをz)
既存のオプションはそのまま使えて、進捗率を >, >=, <, <= でフィルタするオプションが指定できる。

開発30分、目視確認30分の突貫作業だったので、まだテストもないし、設計もよろしくない。
既存のタスクに独自オプションによる処理を差し込む方法が思いつかず丸々コピーしてしまった。
redmineから始まるタスク名もあまり良くないなとちょっと後悔している。そのうち別名でも用意する。
とまあ、だいぶ中途半端な出来だけど、せっかくなので公開しておく。
テスト、オプションの充実、締め切り通知以外のリマインダーの追加などできる事は結構あると思うので、ゆっくり育てます。

2014/06/13

Redmine のプラグインを RSpec3 でテスト出来ない

pinzolo/redmine_persist_wfmt を RSpec3 に対応しようとしてみたが実行すら出来なかった。
/Users/pinzolo/projects/redmine/persist_wfmt/redmine-2.5.1/vendor/bundle/ruby/2.1.0/gems/rspec-support-3.0.0/lib/rspec/support/version_checker.rb:28:in `raise_too_low_error': You are using capybara 2.1.0. RSpec requires version >= 2.2.0. 
(RSpec::Support::LibraryVersionTooLowError)
        from /Users/pinzolo/projects/redmine/persist_wfmt/redmine-2.5.1/vendor/bundle/ruby/2.1.0/gems/rspec-support-3.0.0/lib/rspec/support/version_checker.rb:18:in `check_version!'
        from /Users/pinzolo/projects/redmine/persist_wfmt/redmine-2.5.1/vendor/bundle/ruby/2.1.0/gems/rspec-rails-3.0.1/lib/rspec/rails/vendor/capybara.rb:13:in `'
        from /Users/pinzolo/projects/redmine/persist_wfmt/redmine-2.5.1/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.17/lib/active_support/dependencies.rb:251:in `require'
        from /Users/pinzolo/projects/redmine/persist_wfmt/redmine-2.5.1/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.17/lib/active_support/dependencies.rb:251:in `block in require'
        from /Users/pinzolo/projects/redmine/persist_wfmt/redmine-2.5.1/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.17/lib/active_support/dependencies.rb:236:in `load_dependency'
        from /Users/pinzolo/projects/redmine/persist_wfmt/redmine-2.5.1/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.17/lib/active_support/dependencies.rb:251:in `require'
        .... and more
Redmine 本体の Gemfile で gem "capybara", "~> 2.1.0" なのだが、RSpec3 で Capybara を使用するには 2.2.0 以上を要求される。
このエラーは実行時でなく事前チェックで投げられているようで、 Capybara をプラグインのテストで使用していなくても出る。
さすがに本体のバージョンを無視するわけにはいかないので、当分は gem "rspec", "~> 2.14.0" で行こうと思う。
というか、やっぱりこういうのを避けるためには ActiveSupport::TestCase で書いたほうがいいんだろうな。

2014/05/23

[解決編]UbuntuをアップグレードしたらRedmineでRMagick関連が動かなくなっていた

先日の tail -f pinzo.log: [未解決]UbuntuをアップグレードしたらRedmineでRMagick関連が動かなくなっていた の解決編。

原因調査

まず、何を基準にエラーとしているかを調べる。
該当のURLは /admin/info なので、redmine/app/views/admin/info.html.erb を見るが、それらしい箇所はない。
view になければ controller だろうということで redmine/app/controllers/admin_controller.rb を見る。
あった、単に Magick という定数が定義されているかどうかで判別されているみたいだ。

なぜ定義されていないのか?

RMagick は redmine/lib/redmine.rb で明示的に require されていて、エラーを握りつぶされていた。これでは、ログにはでてこないわけだ。
というわけで、状況再現のためにこちらも require してみる。
% bundle exec rails c production
irb(main):001:0> require 'RMagick'
LoadError: libjpeg.so.62: cannot open shared object file: No such file or directory - /var/lib/rails/redmine-2.5.1/vendor/bundle/ruby/2.1.0/extensions/x86_64-linux/2.1.0-static/rmagick-2.13.2/RMagick2.so from /var/lib/rails/redmine-2.5.1/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.17/lib/active_support/dependencies.rb:251:in `require' from /var/lib/rails/redmine-2.5.1/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.17/lib/active_support/dependencies.rb:251:in `block in require' from /var/lib/rails/redmine-2.5.1/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.17/lib/active_support/dependencies.rb:236:in `load_dependency' from /var/lib/rails/redmine-2.5.1/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.17/lib/active_support/dependencies.rb:251:in `require' from /var/lib/rails/redmine-2.5.1/vendor/bundle/ruby/2.1.0/gems/rmagick-2.13.2/lib/RMagick.rb:11:in `<top (required)>' from /var/lib/rails/redmine-2.5.1/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.17/lib/active_support/dependencies.rb:251:in `require' from /var/lib/rails/redmine-2.5.1/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.17/lib/active_support/dependencies.rb:251:in `block in require' from /var/lib/rails/redmine-2.5.1/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.17/lib/active_support/dependencies.rb:236:in `load_dependency' from /var/lib/rails/redmine-2.5.1/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.17/lib/active_support/dependencies.rb:251:in `require' from (irb):1 from /var/lib/rails/redmine-2.5.1/vendor/bundle/ruby/2.1.0/gems/railties-3.2.17/lib/rails/commands/console.rb:47:in `start' from /var/lib/rails/redmine-2.5.1/vendor/bundle/ruby/2.1.0/gems/railties-3.2.17/lib/rails/commands/console.rb:8:in `start' from /var/lib/rails/redmine-2.5.1/vendor/bundle/ruby/2.1.0/gems/railties-3.2.17/lib/rails/commands.rb:41:in `<top (required)>' from script/rails:6:in `require' from script/rails:6:in `<main>'
libjpeg.so.62 がないのが原因のようだ。

解決方法

libjpeg.so.62 は libjpeg62 をインストールすればいいらしい。
aptitude install libjpeg62
あとは、passenger を再起動したら・・・・

直ったーーーーーーー

2014/05/18

RedmineでMarkdownに切り替えやすくするプラグインを作った

tail -f pinzo.log: Redmine がついに Markdown をサポートしたようだ で書いたように、Redmine が 2.5.0 から試験的に Markdown をサポートしたけど、過去の Textile で書いたもろもろが崩れてしまうので、気軽に乗り換えられない。
でも、やっぱり Markdown で書きたい。主流だし。
というわけで redmine_persist_wfmt というプラグインを作った。
これで少しは気軽に Markdown に切り替えられるですよ。

インストール

README.md にある通り。
$ bundle exec rake pwfmt:persist_all FORMAT=textile RAILS_ENV=production で既存のドキュメントを Textile として保存する。もちろん Markdown として保存することもできる。

イメージ

こんな風に Textile で書かれたドキュメントがあったとする。

プラグインをインストール後、Markdownを使うように変更する。

それでも Textile として変換されて表示されます。

もちろん Markdown として保存すれば

Markdown として変換されて表示されます。

作成・編集時にフォーマットを選択できるので、Textile から Markdown に直すこともできます。(もちろん逆も)

機能とメリット

  • 作成時に指定したフォーマットでずっと表示できる
  • 作成・編集時にフォーマットを指定できる(どちらかしかしらないメンバーがいても大丈夫)
  • 編集時にフォーマットを切り替えられる(統一も順次対応できる)

対応箇所

  • Redmineのウェルカムテキスト
  • プロジェクトの概要
  • チケットの概要と履歴
  • Wiki
  • 文書
  • フォーラムの本文とコメント
  • ニュース
基本的に Wiki 記法で書ける場所は全て対応したつもり

注意事項

  • ツールバーの動作は切り替わらない。Redmineの設定に従う
  • プレビューも未対応。Redmineの設定に従う → v1.1.0 で対応しました。
  • プラグインとかで追加された場所は、フォーマットを選択するドロップダウンはでるかもしれないけど書式は保存されないと思う

プレビューぐらいは対応したいけど、その前にテスト書いてリファクタリングをしたい。
似ているようで微妙に違うソースがたくさんなので、もう少し綺麗になるはず。

2014/05/16

[未解決]UbuntuをアップグレードしたらRedmineでRMagick関連が動かなくなっていた

さくらのVPSのUbuntu10.04を12.04に上げたらいつの間にかRedmineのRMagic関連機能が使えなくなっていた。
% convert
convert: error while loading shared libraries: libjpeg.so.62: cannot open shared object file: No such file or directory
convert が失敗するのが原因のようだ。
10.04の時はリポジトリのバージョンが古くソースからインストールしたので今回も最新版をソースからインストールした。
% wget http://www.imagemagick.org/download/ImageMagick-6.8.9-1.tar.gz
% tar xf ImageMagick-6.8.9-1.tar.gz
% cd ImageMagick-6.8.9-1
% ./configure --enable-lzw=yes --prefix=/opt/ImageMagick/ImageMagick-6.8.9-1
% make
% make install
% /opt/ImageMagick/ImageMagick-6.8.9-1/bin/convert --version
Version: ImageMagick 6.8.9-1 Q16 x86_64 2014-05-16 http://www.imagemagick.org Copyright: Copyright (C) 1999-2014 ImageMagick Studio LLC Features: DPC OpenMP Delegates: bzlib freetype jng jpeg lcms png tiff x xml zlib
インストールが成功したので、既存と置き換える。
% mv /usr/local/bin/animate{,.bak}
% mv /usr/local/bin/compare{,.bak}
% mv /usr/local/bin/composite{,.bak}
% mv /usr/local/bin/conjure{,.bak}
% mv /usr/local/bin/convert{,.bak}
% mv /usr/local/bin/display{,.bak}
% mv /usr/local/bin/identify{,.bak}
% mv /usr/local/bin/import{,.bak}
% mv /usr/local/bin/Magick-config{,.bak}
% mv /usr/local/bin/Magick++-config{,.bak}
% mv /usr/local/bin/MagickCore-config{,.bak}
% mv /usr/local/bin/MagickWand-config{,.bak}
% mv /usr/local/bin/mogrify{,.bak}
% mv /usr/local/bin/montage{,.bak}
% mv /usr/local/bin/stream{,.bak}
% mv /usr/local/bin/Wand-config{,.bak}

% ln -s /opt/ImageMagick/ImageMagick-6.8.9-1/bin/* /usr/bin
% convert --version
Version: ImageMagick 6.8.9-1 Q16 x86_64 2014-05-16 http://www.imagemagick.org Copyright: Copyright (C) 1999-2014 ImageMagick Studio LLC Features: DPC OpenMP Delegates: bzlib freetype jng jpeg lcms png tiff x xml zlib
RMagick を再インストール。
bundle exec gem uninstallでエラーは出るけどちゃんと削除はされるらしい。
% cd /var/lib/rails/redmine
% bundle exec gem uninstall rmagick
Successfully uninstalled rmagick-2.13.2 ERROR: While executing gem ... (NoMethodError) undefined method `delete' for #
% bundle install % touch tmp/restart.txt
その結果がこれである。
なんでや・・・

2014/04/13

Redmine がついに Markdown をサポートしたようだ

Redmine.org の issue を眺めていると Feature #15520: Markdown formatting - Redmine が上に上がっていた。
この要望は定期的にあがるよなーと思って読んでいると、なんととうとうサポートしたとのこと。 2.5.0 - Redmineを見ると、確かに 2.5.0 で追加されてる。
Github, Gist, Qiita, はてなブログ, wri.pe などなど Markdown はエンジニアのメモ記法のデファクトスタンダードになっているので、これは嬉しいニュース。待ち望んでいた人も多いのでは。

設定

確かに experimental となっていますが、Markdown が選択できるようになってます。
プロジェクト単位ではなく、Redmine全体での選択になるけど、もともと書式選択が全体なのは従来の仕様なのでこれはしかたない。

試してみた

早速こんな markdown で wiki を書いてみた。 これがこんなふうになる。
内部では Redcarpet 2.3 を使用しているので当然ながら GFM なシンタックスハイライトまでサポートされているのは嬉しい。

周辺サポート

experimental ながらしっかり周辺もサポートされてて、markdown を選んだ場合には wiki 用のツールバーも markdown 用になっており、各ボタンを押すと markdown に対応した書式を追加してくれる。
ちなみに下記の場所で Markdown が使えているのを確認済み。ほぼ漏れ無く対応されている感じ。
  • Wiki
  • 文書
  • プロジェクトの概要
  • チケットの説明
  • チケットの履歴の注記

残念なところも

ちなみに事前に textile でこんな文書を書いておいて、設定変更後に確認してみるとこうなる。
残念ながら書式は保存されないようです。
textile に設定を戻すと、markdown で書いた文書も textile で解釈された見れたもんじゃない文書になってしまう。
つまり現時点で markdown を使おうと思えば、過去の資産を全て捨てる、もしくは書き換えるしかないということになりますね。
残念だけど正式サポートの頃にはなんとかなるんだろうか?書いた時の書式を保存するとか。

markdown のサポートは現時点で experimental なのでこれから進化していくと思うとドキドキですね。

2014/04/12

Rubyのアップデートがちゃんとできていなくて、Redmineをアップデートできなかった

さくらのVPSで使用している Redmine を最新にしようと思い立った。

% cd work
% wget http://www.redmine.org/releases/redmine-2.5.1.tar.gz
% tar xf redmine-2.5.1.tar.gz
% mv redmine-2.5.1 /etc/lib/rails
% cd /etc/lib/rails/redmine-2.5.1
% cp ../redmine/config/database.yml config/
% cp ../redmine/config/configuration.yml config/
% bundle install --path vendor/bundle
% bundle exec rake generate_secret_token

ここまで順調に来たが、ここでエラー。

Could not find rake-10.1.1 in any of the sources
なぜか、bundler から bundler で今しがたインストールしたはずの gem が参照できないらしい。
調べてみると、どうやら bundler が実行時に参照するのは vendor/bundle/ruby/2.0.0 以下、しかしインストール時にインストールしていたのは vendor/bundle/ruby/1.9.1 以下というちぐはぐな状態になっていた。

思い当たることは、ruby を 2.0.0 にアップデートしたこと。
「今の Redmine をインストールした → ruby 2.0.0 をインストール → 今回」なので今までの Redmine は問題なく動いていたんだろうな
しかも ruby 2.0.0 をインストールした時、手順を間違えて ruby 1.9.3 の実行ファイルを正しく更新できていなかったようだ。
つまり、gem は ruby 1.9.3 の頃のものが動いていて bundler によるインストールは 1.9.1 以下に配置するが、実行時は ruby 2.0.0 で動いているので 2.0.0 以下を参照しようとしていたということだな。

というわけなので、rubyの最新版からちゃんとインストールし直すことにした。

% wget http://ftp.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p451.tar.gz
% tar xf ruby-2.0.0-p451.tar.gz
% cd ruby-2.0.0-p451
% ./configure --prefix=/usr/local/ruby-2.0.0-p451
% make
% make install
% rm /usr/bin/erb
% rm /usr/bin/gem
% rm /usr/bin/irb
% rm /usr/bin/rake
% rm /usr/bin/rdoc
% rm /usr/bin/ri
% rm /usr/bin/ruby
% rm /usr/bin/testrb
% ln -s /usr/local/ruby-2.0.0-p451/bin/* /usr/bin/

手順をミスった ruby-2.0.0-p353 が動かないように変更

% mv /usr/local/bin/erb{,.bak}
% mv /usr/local/bin/gem{,.bak}
% mv /usr/local/bin/irb{,.bak}
% mv /usr/local/bin/rake{,.bak}
% mv /usr/local/bin/rdoc{,.bak}
% mv /usr/local/bin/ri{,.bak}
% mv /usr/local/bin/ruby{,.bak}
% mv /usr/local/bin/testrb{,.bak}

bundler をインストール

% gem install bundler
% ln -s /usr/local/ruby-2.0.0-p451/bin/bundle /usr/bin/

passenger の最新をインストールして変更

% gem install passenger
% cd /usr/local/ruby-2.0.0-p451
% ./bin/passenger-install-apache2-module

# /etc/apache2/mods-available/passenger.load を下記に変更
LoadModule passenger_module /usr/local/ruby-2.0.0-p451/lib/ruby/gems/2.0.0/gems/passenger-4.0.41/buildout/apache2/mod_passenger.so

# /etc/apache2/mods-available/passenger.conf を下記に変更
PassengerRoot /usr/local/ruby-2.0.0-p451/lib/ruby/gems/2.0.0/gems/passenger-4.0.41
PassengerDefaultRuby /usr/bin/ruby

redmine-2.5.1 のインストールのやり直し

# 同じなので省略
% bundle install --path vendor/bundle
% bundle exec rake generate_secret_token
% bundle exec rake db:migrate RAILS_ENV=production
% bundle exec rake tmp:cache:clear RAILS_ENV=production
% bundle exec rake tmp:sessions:clear RAILS_ENV=production
% mkdir public/plugin_assets
% cd ../
% chown -R www-data:www-data redmine-2.5.1
% ln -s /var/lib/rails/redmine-2.5.1 /var/lib/rails/redmine
% service apache2 restart

ちゃんと表示されて一安心

2013/12/08

Redmineのプラグインで既存の文言を上書きする

この情報は Redmine 2.5 で不要になりました。→ tail -f pinzo.log: Redmine 2.5.0 からプラグインでの文言上書きが復活しています

Redmine のプラグインで本体の文言を上書きすることが出来ません。
昔はできたようなのですが、バージョンが違うのか I18n の仕様が変わったのか現在は出来ません。

ja:
  project_module_documents: ドキュメント
  project_module_calendar: 日程表

プラグインの ja.yml にこんな記述をしても画面はかわりません。

通常、プラグインをロードすると、I18n.load_path はこんな状態になります。

$REDMINE_HOME/vendor/bundle/ruby/2.0.0/gems/activesupport-3.2.15/lib/active_support/locale/en.yml
$REDMINE_HOME/vendor/bundle/ruby/2.0.0/gems/activemodel-3.2.15/lib/active_model/locale/en.yml
$REDMINE_HOME/vendor/bundle/ruby/2.0.0/gems/activerecord-3.2.15/lib/active_record/locale/en.yml
$REDMINE_HOME/vendor/bundle/ruby/2.0.0/gems/actionpack-3.2.15/lib/action_view/locale/en.yml
$REDMINE_HOME/plugins/<plugin_name>/config/locales/en.yml
$REDMINE_HOME/plugins/<plugin_name>/config/locales/ja.yml
$REDMINE_HOME/config/locales/ar.yml
$REDMINE_HOME/config/locales/az.yml
$REDMINE_HOME/config/locales/bg.yml
--- 延々と Redmine 本体の言語ファイルが列挙
$REDMINE_HOME/config/locales/vi.yml
$REDMINE_HOME/config/locales/zh-TW.yml
$REDMINE_HOME/config/locales/zh.yml

rails/railties/lib/rails/engine.rb at 3-2-stable · rails/rails にあるように、I18n.load_path の後ろのほうが優先度が高いので、本体の言語ファイルのほうが優先されてしまいプラグイン側で上書きすることができません。 プラグインの登録は config/initializers/30-redmine.rb で行われていて、その際にプラグインの辞書ファイルが I18n.load_path に登録されるのですが、この時点ではアプリケーション本来の辞書ファイルが登録されていないからでしょう。

じゃあどうすればいいのかというと、どこかで I18n.load_path を調整して、プラグインの辞書ファイルを後ろの方にもっていくのがいいのかなと。
確実に行うなら、初期化完了時がよさげですね。
Rails::Engine には after_initialize という目的そのままの機能があるのでこれが使えそうです。

こんなコードを lib あたりに突っ込んでおいて、init.rbrequire すればOK。
I18n.load_path はこんな感じになります。

$REDMINE_HOME/vendor/bundle/ruby/2.0.0/gems/activesupport-3.2.15/lib/active_support/locale/en.yml
$REDMINE_HOME/vendor/bundle/ruby/2.0.0/gems/activemodel-3.2.15/lib/active_model/locale/en.yml
$REDMINE_HOME/vendor/bundle/ruby/2.0.0/gems/activerecord-3.2.15/lib/active_record/locale/en.yml
$REDMINE_HOME/vendor/bundle/ruby/2.0.0/gems/actionpack-3.2.15/lib/action_view/locale/en.yml
$REDMINE_HOME/config/locales/ar.yml
$REDMINE_HOME/config/locales/az.yml
$REDMINE_HOME/config/locales/bg.yml
--- 延々と Redmine 本体の言語ファイルが列挙
$REDMINE_HOME/config/locales/vi.yml
$REDMINE_HOME/config/locales/zh-TW.yml
$REDMINE_HOME/config/locales/zh.yml
$REDMINE_HOME/plugins/<plugin_name>/config/locales/en.yml
$REDMINE_HOME/plugins/<plugin_name>/config/locales/ja.yml

これで、本体の辞書ファイルをプラグインの辞書ファイルで上書きすることができました。

2013/11/23

Redmine のプラグインを Travis で CI してみた

Redmine のプラグインの場合、プラグイン本体のみ Github に登録しているので、そのままでは Travis で CI することができない。
諦めていたんだけど、.travis.yml のオプションとにらめっこしたらなんとなく出来そうな気がしたので試してみた。
10数回の試行を経て、なんとか出来たのでスクリプトを紹介します。

  • .travis.yml
    before_install があるので、after_install があるかと思ったらなかった。

  • before_install.sh
    gem インストール前に実行させるスクリプト。
    Travis では bundle install 前に直下の GemfileBUNDLE_GEMFILE 環境変数に登録されてしまう。
    しかし、指定したいのはプラグインの Gemfile ではなく、Redmine のものなのである。
    なので、mv しまくりでなんとかディレクトリ構成を整えた。苦労した。
    Redmine のダウンロード URL がバージョンだけに依存してくれないのが少し残念。

  • exec_test.sh
    テスト実行用スクリプト。
    前述のとおり after_install がなかったので、bundle install 後の処理(Redmineの初期化など)とテストの実行を同時にすることにした。
    こちらはそんなに苦労しなかった。

これで、プラグインを複数バージョンの Ruby でテストすることができるようになった。
でも、複数バージョンの Redmine でテストすることは当然できない。
複数バージョンの Redmine を対象にテストするなら Jenkins 使うのがいいんだろうな。

2013/09/08

RedmineのプラグインをRSpecでテストする

Redmineは基本的にはxUnitなコードでテストが書かれています。
今のところ例に習いxUnit形式でテスト書いていたんだけど、RSpecで書きたいなという欲求は当然あるわけです。
なので今回RSpecを導入してみた。

まずは、$REDMINE/plugins/<plugin_name>/Gemfile を作成して、bundle install

# Gemfile
group :development, :test do
  gem "rspec-rails", ">= 2.8.1"
end

$REDMINE/plugins/<plugin_name>/spec/spec_helper.rbを作成し、設定を記述。

require File.expand_path(File.dirname(__FILE__) + '/../../../spec/spec_helper')
RSpec.configure do |config|
  config.mock_with :mocha
  config.fixture_path = "#{::Rails.root}/test/fixtures"
end

各種specファイルの冒頭で spec_helper をrequireする。

require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
# require 'spec_helper' ではダメだった。

基本的にはこれで設定はいいはずだけど、なぜかspecタスクで実行できない。
実行できないというよりspecファイルが見つけられないらしい。
rspec コマンドを指定しても不可能。
ベースディレクトリを指定してやれば実行できた。

$ bundle exec rake spec                             # ダメ
$ bundle exec rspec                                 # これもダメ
$ bundle exec rake spec plugins/<plugin_name>/spec  # これでもダメ
$ bundle exec rspec plugins/<plugin_name>/spec      # これはOK

2013/08/01

Redmine plugin にて自動ロード対象のディレクトリを追加するには

どうやら Redmine はプラグインの lib は自動的にロードパスに登録するが、app 以下は controllers, models, helpers のみを autoload の対象にするようだ。
lib/redmine/plugin.rb にこんな記述があった。

例えば、フォームクラスを作って app/forms に配置したい場合は、init.rb に処理を追加してやる必要がある。 一つしか追加しないなら simple の方でいいだろうし、複数追加するなら plugin.rb をパクって multiple で書くのがいいんじゃないかな。

2013/07/28

Redmine plugin 開発時の fixture

Redmine のプラグインのユニットテストのために、fixture を追加した。 $REDMINE/plugins/my_plugin/test/fixtures/my_models.ymlという形でテストデータを追加し、bundle exec rake redmine:plugins:test RAILS_ENV=testを実行したらエラーになった。

Errno::ENOENT: No such file or directory - /Users/pinzolo/projects/my_plugin/redmine-2.3.1/test/fixtures/my_models.yml

つまり、プラグインのtest/fixturesディレクトリを見ていないということみたいだ。

プラグインの test/fixtures を見るように設定するなら、$REDMINE/plugins/my_plugin/test/test_helper.rb に下記を追加すればいいんだけど、こうすると $REDMINE/test/fixtures を見てくれなくなる。

fixture_path が配列でもよしなにやってくれるようにパッチを当てたいところだが、fixture_pathが結構ダイレクトに使われているので大変そうなのと、プラグイン側がやることでもなかろうということで、仕方なく $REDMINE/test/fixtures にコピーする。 fixture を作ったり更新したりする度にコピーするのはめんどいな。

2013/07/04

startup_redmine_plugin_development.sh

Redmine のプラグインを開発するときに最初に行う作業を自動化するスクリプトを書いた。
自動で行なってくれる作業は
  1. 専用ディレクトリの作成
  2. 最新のRedmineを取得
  3. Redmineをローカルにデプロイ
    1. database.ymlを作成
    2. gemのインストール
    3. トークンの作成
    4. マイグレーションの実行
    5. デフォルトデータのロード(デフォルトは日本語)
  4. プラグインの雛形を生成
  5. gitにて初回コミット
惜しむらくは、バージョンとダウンロードURLは都度メンテナンスしていく必要があることかな。