文書の過去の版を表示しています。
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