予告通り、森高千里さんのデータベースの構築について書いて行きます。現在進行中なので、あとから表記を修正する可能性が多分にあります。まずは環境の設定から。Rails は 3.2、Ruby は 1.9.3、View は HAML、テストに rspec, autotest, spork, watchr を使います。
ローカルの Rails 環境の構築
Ruby の gem をあらかじめインストールしておきます.
gem update --system gem install bundler
以下では .zshrc に以下のエイリアスが設定されているものとして記述します
alias be='bundle exec' alias r='be rails' alias bes='be watchr spec/spork.watchr &'
フォルダを作成し,移動します.
mkdir chisato-moritaka-db
cd chisato-moritaka-db
Gemfile を以下のように記述します
source "http://rubygems.org" gem "rails"
bundle で vendor/bundle に Rails をインストールします
bundle install --path vendor/bundle
新規 Rails を作成します.
r new .
他に必要な gem を列記します.
gem 'heroku' # 今回は Heroku に deploy するため gem 'haml' # erb の代わりのページ記述言語。閉じタグがいらないので楽 gem 'haml-rails' group :development, :test do gem 'rake' gem 'rspec-rails' # テストは rspec で記述します gem 'ZenTest' # autotest を行います gem 'autotest-screen' gem 'rails-erd' # ER 図を描画します。要 graphviz gem 'spork' # autotest のテストサーバです。Ruby 1.9 は起動が遅いので必須。 gem 'rdoc' gem 'watchr' # spork の再起動させるトリガファイルを見張ります end
再度 gem をインストールします
bundle
config/application.rb に設定を追加します
# Haml setting # デフォルトで escape_html にする ( XSS 対策) Haml::Template.options[:escape_html] = true # テンプレートを HTML5 にする Haml::Template.options[:format] = :html5 # 出力のデフォルトを UTF_8 にする Encoding.default_external = Encoding::UTF_8 Encoding.default_internal = Encoding::UTF_8 # autoload lib/*.rb config.autoload_paths += Dir["#{config.root}/lib/**/"] # タイムゾーンを東京に config.time_zone = 'Tokyo' # ログをカラーで出力しない config.colorize_logging = false ### Part of a Spork hack. See http://bit.ly/arY19y if Rails.env.test? initializer :after => :initialize_dependency_mechanism do # Work around initializer in railties/lib/rails/application/bootstrap.rb ActiveSupport::Dependencies.mechanism = :load end end
rspec 関係については,autotest のさらなる自動化に記述しているので省略します。
Heroku 用に config/application.rb に追記します
# If you are deploying Rails 3.1 on Heroku, you may want to set: config.assets.initialize_on_precompile = false
rake db:migrate で「uninitialized constant Rake::DSL」というエラーが出るので,Rakefile に以下を追加 (参考(Rails3.2でのuninitialized constant Rake::DSLの解決方法))
require 'rake/dsl_definition'
Heroku 上では自動的に Postgres になるので、database.yml は特に気にする必要はありません。
とりあえず、別スクリーンで bes として、テストサーバ及び autotest を起動していよいよ記述開始です。