RedmineプラグインでOpen Flash Chart(OFC2)を使うとIO ERROR

感想おまちしてます!

001

Redmineのバーンダウンチャートを作りたかったので、Open Flash Chart II Plugin for Ruby on Rails – Graphs (OFC 2)を元に、プラグイン内からサンプルを動かしてみる。
ソースはOpen Flash Chart II – Line Graphのまんま。indexメソッドのところは以下のように書いた。

しかし、以下のように怒られます。

どうも「表示するデータが取れてないよー」ということらしい。
「http://localhost:3000/version_burndown/graph_code」をたたくと404になる。これはコントローラ内で、project_idがない場合に404にしているからだと気がつく。
「http://localhost:3000/version_burndown/graph_code?project_id=fujihara」を叩くとJSONが表示される。
さらにHTMLのソースコードを見てみると以下のようになっていた。

data-fileというところで「/version_burndown/graph_code」を指定している。
これが404でIO ERRORになっているのだろう。

このプラグインの動きは、

  • Flashのファイル(swfファイル)をHTMLで表示する
  • swfファイルの引数に表示するデータ(JSON)のURL、ここでは/version_burndown/grapha_codeをCallする
  • 受け取ったデータをswfファイルで表示する

という順番でグラフを表示しているらしい。
さらに、READMEを見てみると、urlを指定しているところがurl_forを使っていてちょっと違う。

project_idなどの指定をやめて、READMEどおりやったら動かすことができた。
Controller#respond_toはWeb ApplicationとWeb Serviceの垣根をなくす!?を読んでわかったが、READMEの場合は、JSONやHTMLの呼び出しをわけて処理しているみたいだ。こういうやりかたもあるということか。

今回のケースだと、パラメタにproject_idとversion_idが必要なので以下のように書くと動作する。

  def index
@graph = open_flash_chart_object( 800, 450, url_for( :action => 'graph_code', :project_id => @project.id, :version_id => @version.id ) )
end

OFC2の動きが読めてきた。よく出来ているな。