Rails3+herokuで開発はsqlite3、heroku上はPostgreSQLを使う設定
herokuにデプロイするときに sqlite3のところでつまづいた。
herokuでpushしようとしたらPermission deniedとなってしまう
Getting Started with Rails 3.xを見ながらherokuにRails3アプリをデプロイしようとしたら「Permission denied (publickey).」と怒られてしまった。公開鍵の設定に何やら問題があるみたいなので調べてみた。
RedmineでTranslation string with multiple valuesと怒られた時
自作したRedmineのプラグインを、Redmine0.9.0で動かすと
Translation string with multiple values
と怒られた。
production.logには
DEPRECATION WARNING: using %s in messages is deprecated; use {{value}} instead..
とでていて、どうもRailsのどっかのバージョンで、言語ファイルの書き方が変わったらしい。
非推奨なのだったら、せめて動いて欲しいよね。。。
以下のような部分を
<%= l(:recent_activity_status_log, old_name, new_name) %>
こんな感じに直すらしい。
<%= l(:recent_activity_status_log, :old_name => old_name, :new_name => new_name) %>
ラベルを使うっっていうのかな?ja.ymlとかは
recent_activity_status_log: “ステータスが{{old_name}}から{{new_name}}に変更されました。”
みたいに書くらしい。
Redmine0.9.0で0.8.xプラグインを動かしてみたらtranslation missing: ja
Redmine0.9.0にバージョンアップすると、自分で作ったかわいいプラグインたちが「translation missing: ja」と叫びながら動かないことが判明。
調べてみると、0.9.0には、言語ファイルがおかれていたRAILS_ROOT/langが無くなっていて、RAILS_ROOT/config/localesに移動しているみたい。しかも、ymlの書き方が
name:名前 age:年齢
だったのが、
ja: name:名前 age:年齢
になっていた。
とりあず、 史上最高のチームプラグインとかRoadmapsプラグインは、ymlの修正とファイル移動で動くことを確認できた。
今度なおしておかないとなー。
複数アプリを動かす時のDocumentRootとRailsBaseURIの関係
Redmine0.8.4が動いているPassenger環境で、Redmine0.9.0へバージョンアップを考えていたのだけれど、
Apacheの設定になるhttpd.confが以下のように書かれていた。
<VirtualHost *:80> ServerName www.yourhost.com DocumentRoot /var/www/public RailsBaseURI / </VirtualHost>
そして、/var/www/public直下にappとかconfとかRedmineの中身がおかれてしまっていて、複数のRailsを動かすことを考えてないよねーという印象。
現状のRedmineを止めずに複数Redmineを起動させる必要があったので、以下のようにしてみた。
<VirtualHost *:80> ServerName www.yourhost.com DocumentRoot /var/www/public RailsBaseURI / RailsBaseURI /redmine0.9.0 </VirtualHost>
これで、/var/www/public/redmine0.9.0をおいてみたがRoutingError。RailsBaseURIの順番を逆にしても同じ。Rubyのスペシャリストに聞いてみたら、以下の方法で動くことが判明。
<VirtualHost *:80> ServerName www.yourhost.com DocumentRoot /var/www/public RailsBaseURI /redmine2 </VirtualHost>
「RailsBaseURI /」はなくても動くらしい。Redmine0.8.4を止めたら以下のようにしよう。
<VirtualHost *:80> ServerName www.yourhost.com DocumentRoot /var/www RailsBaseURI /redmine0.9.0 </VirtualHost>
Passengerで複数アプリを動かす方法が色々書かれていて迷った。
Redmineプラグイン開発 – リンクの作成はlink_toかも
WEBrickでやってると、リンクのパスが「/projects」とかになる。
これを直に書いちゃうと/「/redmine」とかコンテキストをつけちゃうと困るきがする。そこで、Railsの機能でリンクを作れば、そこらへんもよきにはからってくれるんじゃないかなーと。
ソースを読んでみると、link_toが使えるぽい。
<%= link_to vo.name, {:controller => ‘versions’, :action => ‘show’, :id => vo.version_id} %>
上の出力結果は
http://localhost:3000/versions/show/9
のようになる。コントローラ>アクション>パラメタ(idという名前)という順になるらしい。パスで解決しようとしているみたい。
パラメタをたくさんつける場合もlink_toでいけるみたい。
<%= link_to vo.finish_num, {:controller => ‘projects’, :action => vo.project_identifier, :id => ‘issues’, :fixed_version_id => vo.version_id, :set_filter => ’1′, :status_id => ‘c’} %>
id意外にもいろいろつけてみたが、これだと以下のようになる。
http://localhost:3000/projects/daizu2/issues?fixed_version_id=9&set_filter=1&status_id=c
id=issuesというのが謎な感じだけど、パスの最後はIDしばりなのかなー。
わからないけどこれでうまくいったのでよしとしている。
Redmineプラグイン開発 – 史上最高のチームプラグインリリース
自分のチケットの動きはマイページや活動でみれるんだけど、メンバー全員の今を表示するプラグインが欲しかったので作ってみる。
とかいってますが、結局さぼっている人をみつけて、それをさらすためのプラグインでもある。Redmineを使ってくれない人に対するいやがらせでもある。
史上最高のチームプラグイン
より詳細はgithubをご確認ください。(You would like to get more information, please check github.)
Download github (Recent version is here.) Product Backlog Roadmapsプラグインと同じくデータが増えると重くなる 大豆プラグインの統計情報表示を加えたい
Redmineプラグイン開発 – プラグインでログを出したい
Railsのバージョンによっていろんな情報があったので、Redmine-0.8.2でやったことをメモ。
プロダクションモードで動かしている場合は、「config/environments/production.rb」に以下を記述する。
config.logger = Logger.new(config.log_path) config.logger.level = Logger::DEBUG
これでlog/production.logというのが出力される。Controllerからはlogger.debug(“fujifuji”)みたいにいきなりLoggerが使えるようになる。
production.logにはSQLとかのログもでてますので、デバッグには使えそうだ。
あと、ActionControllerやActiveRecordを継承していると、内部でloggerを持ってるからlogger.debugみたいに使えるけど、libに置いたクラスだとそれができない。
そいう言う場合は、
RAILS_DEFAULT_LOGGER.debug “count = #{count.to_s}”
みたいにしてデフォルトのLoggerを呼び出すこともできる。(loggerをlibにあるクラスで取得する by s21g :: satoko’s blog)
Redmineプラグイン開発 – Controllerの使い方
CakePHPもそうだったんだけど、Rails?なのかしらないが、ControllerでいろいろやってViewを開くための下準備を行う。
作り方はRedmineプラグイン開発 – まずはHello Worldでしょをみてみてー。
お約束
Redmineのプラグインでは、unloadableと書いておかないとだめらしい。
class RoadmapsMainController < ApplicationController unloadable ・・・ end
これがないと「A copy of ApplicationController has been removed from the module tree but is still active!」と怒られるらしい。(by maeda.na@はてなさんを参考のこと)
また、プロジェクトメニューにプラグインを表示しているときには、Controllerのどこかで、
@project = Project.find(params[:project_id])
としないと、「概要」「活動」・・・とかのタブが消えるらしい。これもby maeda.na@はてなさんを見てわかった。
パラメタの受け取り
paramsってところからとってくるだけ。@のついた、インスタンス変数にあげて、Viewにつなぐことができる。
@start_date = params[:start_date] @due_date = params[:due_date]
こういう処理はinitとかいうメソッドでやってしまうのもいいかも。
def init @assigned_to_id = params[:assigned_to_id] @start_date = params[:start_date] @due_date = params[:due_date] @all_users = User.find(:all, :conditions => ["status = 1"]) if @assigned_to_id @target_user = User.find(:first, :conditions => ["id = ?", @assigned_to_id]) end end
Viewではインスタンス変数などを表示するだけ。上のソースである@all_usersをSelectボックスにしてみると・・・
<select name=”assigned_to_id”> <% @all_users.each do |user| %> <option value=”<%= user.id %>”><%= user.name %></option> <% end %> </select>
Controllerと同じ感覚で書ける。セッションをまたぐときとかはまだ謎。
Redmineプラグイン開発 – Roadmapsプラグインリリース
通常、「ロードマップ」モジュールをクリックすると、そのプロジェクトのロードマップだけ一覧表示される。しかし、進捗管理でVersionを元に確認していると、プロジェクトには親と子の関係があったりするので、毎回、各プロジェクトのロードマップを開かないとだめになる。
If you check roadmap views, you can only see roadmaps in the project. But Redmine can use sub project and set tree structure, so this plugin show you all projects roadmaps.
Redmineプラグイン開発 – メニューの表示
Redmineのプラグインをメニューなどに表示させる方法をまとめる。
詳しくは、Extending the project menuを参考のこと。
メニューへの表示方法
init.rbにメニューで表示させる位置を記述する。
menu(menu_name, item_name, url, options={})<br /><br /> menu_name
メニューを表示させる場所は以下の4つから選べる。
:top_menu – トップの左メニュー :account_menu -トップ右のサインイン/アウトのメニュー :application_menu – ユーザがプロジェクト内にはいってないときのメインメニュー :project_menu – ユーザがプロジェクト内にいるときのメインメニュー
item_name
多分、プラグイン名を指定する。僕は「:redmine_daizu」って指定している。
option controller・・・呼び出したいコントローラ名を指定する acction・・・呼び出したいアクション名を指定する caption・・・メニューに表示する文字。あとで国際化対応したいところ。 表示する場所・・・「:last => true」でメニューの最後に表示となる。afterとかbeforeとかでもメニューの場所は設定可能。 top menu
調査中。
account menu
調査中。
application menu
ログイン前の画面にタブ表示される。大豆プラグインはこれにしてみた。
menu :application_menu, :daizu, { :controller => ‘daizu_main’, :action => ‘index’ }, :caption => :daizu_name, :last => true project menu
プロジェクトの画面を開いたときにメニューに出てくる。
permission :roadmaps, {:roadmaps_main => [:index]}, :public => true menu :project_menu, :roadmaps, { :controller => ‘roadmaps_main’, :action => ‘index’ }, :caption => :roadmaps_name, :after => :roadmap, :param => :project_id
「public => true」で表示されるようになる。
「ロードマップス」と表示されているのが分かる。
ロードマップスのリンクには「:param => :project_id」と指定しているため「http://localhost:3000/roadmaps_main?project_id=daizu2」のようにプロジェクトIDのパラメタがつく。
パーミッションの追加
init.rbに以下のように記述するとパーミッションの設定ができるようになる。
permission :view_roadmaps, [...]
Redmineの使い方ベストプラクティスを考えてみる
RedmineやTracのようなBTSはデータの持たせ方でいくらでも使い道が広がる。
しかし、裏を返せば、なんでもできるからどうやったらいいかが分かりにくかったりする。
そこで、これまでの経験から、最低限の使い方をきめておこうかと。
Redmineはデフォルトの状態(Ver0.8.0)として、カスタムフィールドは使わないで、使い方のベストプラクティスを考えてみる。
トラッカー
トラッカーは以下を作成する。
設計 開発 テスト バグ 運用 会議
プロジェクトで使う場合は、だいたい上記作業が大分類になると思うので、トラッカーは作業大分類としている。「要件定義」とかもあるなら入れてもいいかもしれない。
ステータス
初期は「新規」。作業に入ったら「担当」。終わったら「終了」。この3つだけ使う。やらなくてよくなった作業は進捗を100%にして「却下」に設定してCloseする。
優先度
これはそのまんま使う。
担当者
やる人。もしくは作業の中心になる人を設定する。
これはリーダーがアサインする場合と、自分で自分に設定する場合、自分が他人に譲ったり譲られたりする場合がある。
Version
マイルストーンとなるものを設定する。アプリとかのVersionみたいに、バージョンをマイルストーンにする場合があまりなかったので、「○○アプリ Phase1リリース」とかが多かった。
Versionには、ある時間になったらチケットがなくならなければならないようなマイルストーンとなるものを入れるべき。
カテゴリ
トラッカーで大分類を決めたので、中分類となる。藤原の場合は、プロジェクトで作る機能でわけていた。
MVCモデルに合わせて、画面・ビジネスロジック・DAO・・・みたいにしてもいい気がする。
カテゴリは入力を減らすために使わないという手もある。藤原はカテゴリを使わないで入力を減らす派。
開始日/期限日
開始日予定日と完了予定日を入れる。
予定工数
そのまま。
進捗
そのまま。
この値は停止はすれど、下がることはあり得ないとする。
作業が思った以上に増えた場合は、別にチケットを増やせばいい。
おわりに
MSのプロジェクトだと大中小分類とかができるが、それをカテゴリとかでがんばるよりは、カスタムフィールドを3つ作ってカテゴリを使わないほうが使いやすかった。
タイムトラッキングのデータは、管理者だったらかなり欲しい情報なので、正確な時間をいれてもらうようにしたほうがいい。
わけあって急ぎでタイムトラッキングデータをとれる大豆プラグインを作ったけど、ほしい情報をまとめて、プラグインをちゃちゃっと実装すれば、週や月で報告するデータもリアルタイムで取得できるようになる。
また、Redmineを使っていて思ったのが、使わない人もいれば使えない人もいるということ。
使わない人は使わざるをえないようにすべき。作業を見える化することには作業者としても意味がある。
使えない人は、使えるように管理者が指導すべき。作業をブレークダウンできない人間が、作業を確実に完了できるわけない。経験や勘とかに頼ってられないので、最初は管理者がチケットを切ってあげるとかでもよい。
最終的に、各自が自分のやるべきことを自分で整理できるようになれば、そのプロジェクトはきっといいメンバーが集まったといえるんじゃないかな。
なによりも、自分のチケットが終わればそれで終わりとならないように、Redmineを使って管理コストを下げた分、設計のMTGに時間をかけたり、課題のディスカッションを開いたり、飲みに行ったりして、プロジェクトメンバー間のコミュニケーション時間をとることがとても重要。
管理者は、作業者がハッピーに作業できるように、努力をすべき。
Redmineプラグイン開発 – 大豆プラグインがとりあえずできた
とりあえずできたので共有。
大豆プラグイン
時間指定でチケットを一覧表示できて、タイムトラッキング情報から時間コストの予実統計情報をグラフィカルに表示するプラグイン。
きゃーっと作ったのでいれてすぐ動かない可能性があります。ロードマップスプラグインや史上最強のチームプラグインに、機能を移行中です。
ライセンス:GPLv3 リポジトリソース:Google Code 最新バージョン:0.4.0 コメント:がりがりつくったので設計とかは見逃してください Requires Redmine 0.8.2 WEBRickで動作確認した Download / Install ダウンロードはこちらから。
インストールは/RAILS_ROOT/vendor/pluginsに置くだけ。
Change Log 2/15 0.4.0 リリース バグ分析画面追加 2/14 0.3.0 リリース
課題 RAILS_ROOTが/ではない場合、Viewのパスを書き変えないとJavascriptが動かないと思う 国際化が中途半端 Railsの機能を使いきれていないのでハードコーディングが結構ある 人単位での統計がほしいかも そのうちプロジェクト統計プラグインとして作り直そうと思う
画面イメージ
時間指定でチケットを取り出すページ。将来的にこれで週報を自動生成したい。
時間指定で、トラッカーの時間コストを出すページ。
バグの種類を分析して表示する。
チケットに「原因」というカスタムフィールドを追加し、バグという名前のトラッカーだけ入力してもらうようにすれば動くはず。
Redmineプラグイン開発 – Viewを国際化してみる
Railsの国際化方法になるんだろうけど、Rails2.2で国際化が実現したとかしないとかで、よくわからない。
Redmineでは、以下の方法でViewの国際化はうまくいった。
まずは、plugin_home/langにあるen.ymlをコピーしてja.ymlを作る。
ja.ymlには以下のように記述する。
plugin_name: “大豆” tracker_sum: “合計” top_page: “トップページ”
index.html.erbでは、以下のように記述する。
<%= l(:top_page) %>
こんだけで、簡単に国際化可能。
Controllerとかでの方法はまた次回にでも。
僕について
Dai Fujihara
A hero can be anyone.
藤原大はマネージャでありアジャイル実践者だ。そして、プロジェクトリーダー、チェンジ・エージェント、アジャイルコーチ、トレーナーでもある。彼はまたRedmine、Jenkinsといった開発を支援するツール環境の整備や、アジャイル開発を活用した創造的なソフトウェア開発の支援を行っている。さらに、趣味は沖縄離島巡りらしい。
ここ最近の人気
永久保存の本
Venkat Subramaniam (著), Andy Hunt (著), 木下 史彦 (監訳), 角谷 信太郎 (監訳)
アジャイルな習慣とは一体何なのか?本書ではプラクティスを交えながら、その姿勢を読者に問いかけている。世代や役割をこえて色褪せない「アジャイル」に対する良書。Amazonレビュー
Mike Cohn (著), マイク コーン (著), 安井 力 (翻訳), 角谷 信太郎 (翻訳)
採用した現在のタイトルは、見積りや計画づくりといったプロセスを、アジャイルに進めなければならないと謳っているのだ。見積りと計画づくりがアジャイルでないのに、プロジェクトがアジャイルであるということはありえない。(イントロダクションより)
Jonathan Rasmusson (著), 西村 直人 (翻訳), 角谷 信太郎 (翻訳)
アジャイルサムライ―それはソフトウェアを顧客に届ける猛々しきプロフェッショナルだ。本書では、圧倒的なアジャイルプロジェクトの姿を見せる。2011年爆発的にヒットしたアジャイル開発に情熱を持つエンジニアに届けたい本。タグ
Agile ant Apache bash Eclipse GlassFish install Java Javascript kobo Linux log4j Management Maven Open Source PHP Pukiwiki Python Redmine Ruby Ruby on Rails Scrum Spring Struts Struts2 Subversion Test Tomcat Trac VBA Web WebDriver WebLogic Windows WordPress 働く 勉強会 嫁(ベータ) 思い出し笑う 我思う 旅する 映画/ドラマ 英語を話す 読むと聞く 過去を語るアーカイブ










