RailsでプロジェクトのSVNバージョンを表示する

今作ってるシステムでSVNのバージョンを表示させようと思いって書いてみました.

config/environment.rbを編集

config/environment.rbに以下を追加

APP_CONFIG = {}
APP_CONFIG[:admin_email] = "MyApp <admin@example.com>"
APP_CONFIG[:site_name]   = "MyApp"
APP_CONFIG[:major_version] = "0"
APP_CONFIG[:minor_version] = "1"
APP_CONFIG[:revision]      = nil

# バージョンを拾ってこれれば拾ってくる.
begin
  require "rexml/document"
  src = `svn info --xml #{RAILS_ROOT}`
  unless src.nil? || src.empty?
    doc = REXML::Document.new src
    APP_CONFIG[:revision] = doc.elements['/info/entry'].attributes['revision']
  end
rescue
end
APP_CONFIG[:version] = "#{APP_CONFIG[:major_version]}.#{APP_CONFIG[:minor_version]}"
APP_CONFIG[:version] += ".#{APP_CONFIG[:revision]}" unless APP_CONFIG[:revision].nil?
APP_CONFIG[:full_version] = "#{APP_CONFIG[:site_name]} ver.#{APP_CONFIG[:version]}"

viewを編集

viewのバージョンを表示したい場所に以下を追加

<%= APP_CONFIG[:full_version] -%>

Railsを起動して確認

っで、以下の様に表示されます

MyApp ver.0.1.281

処理内容

  1. Railsを起動
    1. svnコマンドを叩いてローカルリポジトリの情報を取得
    2. リポジトリ情報をパースしてrevisionを取得

リポジトリのrevesionが取得できない場合はrevesion情報は表示しません.
例外処理もしているのでこれが原因でアプリのエラーならないようにしてあります.