ユーザ用ツール

サイト用ツール


rails

文書の過去の版を表示しています。


Ruby on Rails

Ruby on Rails (rails) はRubyのWebアプリケーションフレームワーク。URLパスをベースとするディスパッチコントローラ、強力なORマッパ、erbによる画面出力をシームレスに接続する。規約を守る事で開発効率を飛躍的に向上させる「設定より規約(Conversion over Configuration)」という思想を普及させた立役者である。

railsのコンポーネント

rake

Rubyで作られたビルドツール(ruby make?)。railsではrakeコマンドでテスト実行、マイグレーション管理などを行う。使用できるタスクをみるには、railsディレクトリで

$ rake -T

開発環境

実行環境

基本的にpassengerで動作させれば大抵事足りる。外部に公開したいならさくらのvps辺りを借りるのが良いだろう。

手軽に負荷分散を行いたい場合1)は、リバースプロキシとしてApacheを置き、mod_proxy_http + mod_proxy_balancerを使ってロードバランシングするのが簡単。バックエンドのアプリケーションサーバはunicornかapache + passenger、nginx + passengerが良いだろう。

railsの負荷分散する前にボトルネックがどこか調べる。大抵はrailsよりもDBがネックになる。DBが原因なら、DBを別サーバにする。それでもだめならmemcachedにデータをキャッシュ、さらに分散処理を考える。あまり更新されないページについてはキャッシュを使う。

メモリは十分に乗せよう。rails、passengerはメモリ使用量が大きい。

Xenなどの仮想環境での運用には十分な慎重さが求められる。仮想環境ではディスク性能が全体のパフォーマンスに非常に大きな影響を与える。なぜならばCPUはマルチコア化で仮想化に対応しているが、ディスクは一つだからだ。IO負荷があまりに大きいとIO waitが跳ね上がってロードアベレージが100を越える事もあり、ホストOSすらも反応しなくなる。I/Oスケジューラの設定が間違っている事もあるので見直そう。

Rails 2

Ubuntuにインストール

以下8.04の場合なので、他バージョンでは微妙に必要パッケージや実行コマンドが異なっているが大筋は同じ

# とりあえず最新に
sudo aptitude update
sudo aptitude safe-upgrade

# rubyのインストール
sudo aptitude install ruby1.8
sudo aptitude install ruby1.8-dev
sudo aptitude install rubygems

# MySQLを使うならば
sudo aptitude install mysql-server
sudo aptitude install mysql-client
sudo aptitude install libmysqlclient-dev

# Railsをインストール
sudo gem update --system
sudo gem1.8 install rails

# rails 2.3.4を指定してインストールしたいならば
sudo gem1.8 install -v=2.3.4 rails

# MySQLを使うならば
sudo gem1.8 install mysql

アップグレード

Railsのバージョンを上げたい。まず、 config/environment.rb の RAILS_GEM_VERSION を修正。その後

$ rake rails:update

自動生成

railsの各種アプリケーションモジュールはスクリプトで生成する。

scaffoldはモデル、コントローラ、ビュー、テスト、マイグレーションを一度に生成し、URL設定も行う。

script/generate scaffold item name:string price:integer
=> app/controller/items_controller
   app/model/item.rb
   app/view/items/index.html.erb
   app/view/items/new.html.erb
   app/view/items/edit.html.erb
   app/view/items/shot.html.erb
   db/migrate/xxxxxxxx_create_items.rb

modelはモデルとマイグレーションを作成する

script/generate model item
=> app/model/item.rb
   db/migrate/xxxxxxxx_create_items.rb

controllerを作成する

script/generate controller cart
=> app/controller/cart_controller

マイグレーション(DB定義の管理)を作成する

script/generate migration add_grade_on_items
=> db/migrate/xxxxxxxx_add_grade_on_items.rb

マイグレーションは命名規則を考えておくと良い。(例:add_grade_on_items ならば items テーブルに grade カラムを追加する)

削除するときは destroy

script/destroy model item
1)
どーせ高価なロードバランサ買うカネなんてありませんよ!
rails.1303262468.txt.gz · 最終更新: 2011/04/20 01:21 by nullpon