redmine 読み (1)

よんどころのない理由にて修行することとなりました。何があるか分かりませんね。とりあえず github から clone しました。

$ git clone git://github.com/edavis10/redmine.git

で、rake routes したらそもそも rails が導入されておらぬ、と叱られたので諸々の gem を導入することに。

$ bundle install

と、まず mysql2 な gem 導入失敗。どうもヘッダが無い模様。以下を導入。

$ sudo apt-get install -fy libmysqlclient-dev

あるいは pg の導入にも失敗。こちらもヘッダが無いとのことで以下を導入。

libpqxx3-dev

次は rmagick 導入で不具合。

checking for Magick-config... no

とのこと。以下で良いのかな

$ sudo apt-get install -fy libmagick++-dev

次は sqlite か。しかし見事なまでに開発関連のパケジが入ってないなorz

$ sudo apt-get install -fy libsqlite3-dev

を、これで bundle install は正常終了しました。で、rake routes してみたらこんどは config/database.yml が無いとのこと。以下にしてリトライ。

production:
  adapter: sqlite3
  database: db/p.sqlite3


development:
  adapter: sqlite3
  database: db/d.sqlite3


test:
  adapter: sqlite3
  database: db/test.sqlite3

を、出た出た。一部を以下に (かなり整形)。

home              /                           welcome#index
signin   GET|POST /login(.:format)            account#login
signout  GET|POST /logout(.:format)           account#logout
register GET|POST /account/register(.:format) account#register

Named Route というのがあるんですね。rails console は動くのかな。を、動いた。

irb(main):001:0> app.home_path
=> "/"

あるいは

irb(main):005:0> app.edit_user_path(1)
=> "/users/1/edit"

一応 routes.rb と apps/controllers 配下は突き合わせておいた方が良いのかどうか。あと、ケツについてる (.:format) って何かな、と思ってたら .xml とか .json というソレなんですね。括弧付きなので省略可、ということなのか。
あと、入れ子になった resources の show, update, destroy は入れ子の親なソレが略されるんですね。確かに不要と言えば不要か。
例えば

  resources :projects do

# 略

    resources :memberships, :shallow => true, :controller => 'members', 
      :only => [:index, :show, :new, :create, :update, :destroy] do

みたいなケースだと吐き出される routes は以下になってます (横に長いので尻を切ってます)。

project_memberships    GET    /projects/:project_id/memberships(.:format)    
                       POST   /projects/:project_id/memberships(.:format)    
new_project_membership GET    /projects/:project_id/memberships/new(.:format)
membership             GET    /memberships/:id(.:format)                     
                       PUT    /memberships/:id(.:format)                     
                       DELETE /memberships/:id(.:format)                     

とりあえず

ルーティングを深く掘っても仕方が無いのでテストのあたりを云々してみます。rspec ではなくて ActiveSupport のソレなんすね。とりあえず development な DB をナニ。

$ rake db:migrate RAILS_END=development

かなり時間かかりました。で、rake test してみたらかなり時間がかかりました。

Finished in 122.219829498 seconds.

1021 tests, 3160 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications
0% passed

8.35 tests/s, 25.86 assertions/s

あら、0% ?
ちなみに rake test:units してみたらリポジトリが無くて云々な出力がかなりありますね。

Finished in 375.607633134 seconds.

1510 tests, 11276 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications
0% passed

4.02 tests/s, 30.02 assertions/s

むむ。0% passed てのはどーゆー意味なんだろ。つうかどう掘るべきかが微妙。

ちょろっと掘削

エントリポイント、ってことで config/routes.rb の以下がそのはず。

RedmineApp::Application.routes.draw do
  root :to => 'welcome#index', :as => 'home'

welcome コントローラの index なアクションが以下か。(app/controllers/welcome_controller.rb)

class WelcomeController < ApplicationController
  caches_action :robots

  def index
    @news = News.latest User.current
    @projects = Project.latest User.current
  end

render なんちゃらは省略可能なのかどうか。model も確認してみます。News.latest の定義が以下。

  # returns latest news for projects visible by user
  def self.latest(user = User.current, count = 5)
    visible(user).includes([:author, :project]).order("#{News.table_name}.created_on DESC").limit(count).all
  end

う、詳細は別途掘ります。やっぱ浦島太郎だ。で、view は app/views/welcome/index.html.erb なのか。ここも色々確認必要です。
そりゃ良いのですが app/views/layouts 配下に application.* みたいのがなくって代わりに base.html.erb みたいのが置いてあってそれが大元っぽく見えるのですが、この指定ってどこだよ、と言いつつ find|xargs grep してみたら app/controllers/application_controller.rb に layout の指定がありました。

  layout 'base'

app/controllers/application_controller.rb も確認必要ですね。

とりあえず

  • app/models/news.rb の latest メソド確認
  • app/models/project.rb の latest メソド確認
  • app/models/user.rb も確認
  • app/views/welcome/index.html.erb 確認
  • app/controllers/application_controller.rb 確認

あと、-dev なパケジ全部入れて rbenv な環境作った AMI も作っておく方向。