#はじめに
railsアプリからERDのpdfを出力できるという噂のrails-erd
とりあえず
(略)
rails-Graphviz
rails-erd
(略)
でbundle installして、ERD作成コマンドであるrake erd
を実行した。
%rake erd
怒られた。
%rake erd
Loading application environment...
Loading code in search of Active Record models...
Generating Entity-Relationship Diagram for 5 models...
rake aborted!
Saving diagram failed!
Verify that Graphviz is installed and in your path, or use filetype=dot.
/Library/Ruby/Gems/2.0.0/gems/rails-erd-1.1.0/lib/rails_erd/diagram/graphviz.rb:198:in `rescue in block in <class:Graphviz>'
/Library/Ruby/Gems/2.0.0/gems/rails-erd-1.1.0/lib/rails_erd/diagram/graphviz.rb:190:in `block in <class:Graphviz>'
/Library/Ruby/Gems/2.0.0/gems/rails-erd-1.1.0/lib/rails_erd/diagram.rb:142:in `instance_eval'
/Library/Ruby/Gems/2.0.0/gems/rails-erd-1.1.0/lib/rails_erd/diagram.rb:142:in `save'
/Library/Ruby/Gems/2.0.0/gems/rails-erd-1.1.0/lib/rails_erd/diagram.rb:120:in `create'
/Library/Ruby/Gems/2.0.0/gems/rails-erd-1.1.0/lib/rails_erd/diagram.rb:74:in `create'
/Library/Ruby/Gems/2.0.0/gems/rails-erd-1.1.0/lib/rails_erd/tasks.rake:41:in `block (2 levels) in <top (required)>'
Tasks: TOP => erd => erd:generate
(See full trace by running task with --trace)
Graphvizがインストールされてるか確かめろ、もしくはファイルタイプをどっとにしろ、と。Graphviz というソフトを事前にインストールしておかねばならかなったのだ。
#準備1.Graphvizのインストール
Graphvizのページをみる。
http://www.graphviz.org/Download_macos.php
Note: For some reason, the Graphviz app no longer works in the 2.38 and 2.39 packages for Mountain Lion (and Maverick). If you just need the command-line tools and libraries, these still work and are installed in /usr/local as usual. If you want the app, you can get it from homebrew or macports, or use the 2.36 version below.
最新の2.38はやつはMountain Lion (and Maverick)で動かねえよと。下の2.36 pkgかhomebrewとかmackportsでいれてね、とのこと。
とりあえずここを参考に
http://www.graphviz.org/Download..php
Mac OS X
MacPorts provides both stable and development versions of Graphviz and the Mac GUI Graphviz.app. These can be obtained via the ports "graphviz", "graphviz-devel", "graphviz-gui" and "graphviz-gui-devel".
Homebrew has a graphviz port (so just brew install graphviz, we hope).
"we hope"という表現に若干の不安を覚えつつ brew install graphviz
でインストールした。無事インストールはできた。
#準備2.rails-erdで使用するフォントの変更
Graphvizいれたからもう大丈夫だろう!再度rake erd
に挑戦したらまた怒られた。
%rake erd
Loading application environment...
Loading code in search of Active Record models...
Generating Entity-Relationship Diagram for 5 models...
rake aborted!
Saving diagram failed!
Graphviz produced errors. Verify it has support for filetype=pdf, or use filetype=dot.
Original error: 2014-07-26 12:32:48.605 dot[5891:d07] CoreText performance note: Client called CTFontCreateWithName() using name "Arial Italic" and got font with PostScript name "Arial-ItalicMT". For best performance, only use PostScript names when calling this API.
/Library/Ruby/Gems/2.0.0/gems/rails-erd-1.1.0/lib/rails_erd/diagram/graphviz.rb:195:in `rescue in block in <class:Graphviz>'
/Library/Ruby/Gems/2.0.0/gems/rails-erd-1.1.0/lib/rails_erd/diagram/graphviz.rb:190:in `block in <class:Graphviz>'
/Library/Ruby/Gems/2.0.0/gems/rails-erd-1.1.0/lib/rails_erd/diagram.rb:142:in `instance_eval'
/Library/Ruby/Gems/2.0.0/gems/rails-erd-1.1.0/lib/rails_erd/diagram.rb:142:in `save'
/Library/Ruby/Gems/2.0.0/gems/rails-erd-1.1.0/lib/rails_erd/diagram.rb:120:in `create'
/Library/Ruby/Gems/2.0.0/gems/rails-erd-1.1.0/lib/rails_erd/diagram.rb:74:in `create'
/Library/Ruby/Gems/2.0.0/gems/rails-erd-1.1.0/lib/rails_erd/tasks.rake:41:in `block (2 levels) in <top (required)>'
Tasks: TOP => erd => erd:generate
(See full trace by running task with --trace)
メッセージから伺うに、フォントが悪いのかな?と思い調べる。
https://github.com/voormedia/rails-erd/issues/61 のhayduke19us(commented on 11 Dec 2013)は「fontnameをPostscriptフォントなやつにしろ」といっている。とりあえず指摘されている2箇所を確認。
##rails_erd/diagram/graphviz.rb
module RailsERD
class Diagram
# Create Graphviz-based diagrams based on the domain model. For easy
# command line graph generation, you can use:
#
# % rake erd
#
# === Options
#
# The following options are supported:
#
# filename:: The file basename of the generated diagram. Defaults to +ERD+,
# or any other extension based on the file type.
# filetype:: The file type of the generated diagram. Defaults to +pdf+, which
# is the recommended format. Other formats may render significantly
# worse than a PDF file. The available formats depend on your installation
# of Graphviz.
# notation:: The cardinality notation to be used. Can be +:simple+ or
# +:bachman+. Refer to README.rdoc or to the examples on the project
# homepage for more information and examples.
# orientation:: The direction of the hierarchy of entities. Either +:horizontal+
# or +:vertical+. Defaults to +horizontal+. The orientation of the
# PDF that is generated depends on the amount of hierarchy
# in your models.
# title:: The title to add at the top of the diagram. Defaults to
# <tt>"YourApplication domain model"</tt>.
class Graphviz < Diagram
NODE_LABEL_TEMPLATES = { :html => "node.html.erb", :record => "node.record.erb" } # @private :nodoc:
NODE_WIDTH = 130 # @private :nodoc:
# Default graph attributes.
GRAPH_ATTRIBUTES = {
:rankdir => :LR,
:ranksep => 0.5,
:nodesep => 0.4,
:pad => "0.4,0.4",
:margin => "0,0",
:concentrate => true,
:labelloc => :t,
:fontsize => 13,
:fontname => "Arial Bold"
}
# Default node attributes.
NODE_ATTRIBUTES = {
:shape => "Mrecord",
:fontsize => 10,
:fontname => "Arial",
:margin => "0.07,0.05",
:penwidth => 1.0
}
# Default edge attributes.
EDGE_ATTRIBUTES = {
:fontname => "Arial",
:fontsize => 8,
:dir => :both,
この辺かー。バックアップとって修正する。とりあえずフォントは"Courier"にした。
:fontname => "Courier"
に変更。
##rails_erd/diagram/templates/node.html.erb
ビューでもfontfaceでfont指定している箇所があるので、要修正。
<% if options.orientation == :vertical %>{<% end %>
<table border="0" align="center" cellspacing="0.5" cellpadding="0" width="<%= NODE_WIDTH + 4 %>">
<tr><td align="center" valign="bottom" width="<%= NODE_WIDTH %>"><font face="Arial Bold" point-size="11"><%= entity.name %></font></td></tr>
</table>
<% if attributes.any? %>
|
<table border="0" align="left" cellspacing="2" cellpadding="0" width="<%= NODE_WIDTH + 4 %>">
<% attributes.each do |attribute| %>
<tr><td align="left" width="<%= NODE_WIDTH %>" port="<%= attribute %>"><%= attribute %> <font face="Arial Italic" color="grey60"><%= attribute.type_description %></font></td></tr>
<% end %>
</table>
<% else %>
<% end %>
<% if options.orientation == :vertical %>}<% end %>
font face="Courier"
にした。
#再挑戦=>成功!!
再挑戦
%rake erd
Loading application environment...
Loading code in search of Active Record models...
Generating Entity-Relationship Diagram for 5 models...
Done! Saved diagram to erd.pdf.
やったー!プロジェクトルート直下にpdfファイルができたよ。
%ls
Gemfile
README.rdoc
app
config
db
lib
public
tmp
Gemfile.lock
Rakefile
bin
config.ru
erd.pdf
log
test
vendor
Courierだとなんとなくかわいい。えがったえがった。