rails
差分
このページの2つのバージョン間の差分を表示します。
次のリビジョン | 前のリビジョン | ||
rails [2010/02/02 06:48] – 外部編集 127.0.0.1 | rails [2023/08/26 04:14] (現在) – [Pow] 削除 nullpon | ||
---|---|---|---|
行 4: | 行 4: | ||
Ruby on Rails (rails) はRubyのWebアプリケーションフレームワーク。URLパスをベースとするディスパッチコントローラ、強力なORマッパ、erbによる画面出力をシームレスに接続する。規約を守る事で開発効率を飛躍的に向上させる「設定より規約(Conversion over Configuration)」という思想を普及させた立役者である。 | Ruby on Rails (rails) はRubyのWebアプリケーションフレームワーク。URLパスをベースとするディスパッチコントローラ、強力なORマッパ、erbによる画面出力をシームレスに接続する。規約を守る事で開発効率を飛躍的に向上させる「設定より規約(Conversion over Configuration)」という思想を普及させた立役者である。 | ||
- | ===== セットアップ ===== | + | |
- | ==== Ubuntuの場合 ==== | + | ===== railsのコンポーネント ===== |
+ | * [[rails: | ||
+ | * [[rails: | ||
+ | * [[rails: | ||
+ | * [[rails: | ||
+ | * [[rails: | ||
+ | * [[rails: | ||
+ | * [[rails: | ||
+ | * [[rails: | ||
+ | * [[rails: | ||
+ | * [[rails: | ||
+ | * [[rails: | ||
+ | |||
+ | Ajaxを使う(ちと情報が古いかも) | ||
+ | * http:// | ||
+ | * http:// | ||
+ | * http:// | ||
+ | |||
+ | ===== rake ===== | ||
+ | Rubyで作られたビルドツール(ruby make? | ||
+ | $ rake -T | ||
+ | |||
+ | |||
+ | ===== 開発環境 ===== | ||
+ | * [[http:// | ||
+ | * [[NetBeans]]にはRuby開発環境が存在する。gemのコントロールもできる。 | ||
+ | * [[http:// | ||
+ | |||
+ | |||
+ | ===== 実行環境 | ||
+ | 基本的にpassengerで動作させれば大抵事足りる。外部に公開したいならさくらのvps辺りを借りるのが良いだろう。 | ||
+ | |||
+ | * [[ruby: | ||
+ | |||
+ | 手軽に負荷分散を行いたい場合((どーせ高価なロードバランサ買うカネなんてありませんよ!))は、リバースプロキシとして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/ | ||
+ | |||
+ | アプリの負荷分散が必要ならば、nginxをリバースプロキシとしてunicornを並列化すると良い。 | ||
+ | |||
+ | ローカルで動かすならばpassengerのスタンドアローンモードでの実行も良いだろう。 | ||
+ | |||
+ | * [[http:// | ||
+ | ====== Rails 2 ====== | ||
+ | ===== Ubuntuにインストール ===== | ||
以下8.04の場合なので、他バージョンでは微妙に必要パッケージや実行コマンドが異なっているが大筋は同じ | 以下8.04の場合なので、他バージョンでは微妙に必要パッケージや実行コマンドが異なっているが大筋は同じ | ||
< | < | ||
行 33: | 行 81: | ||
</ | </ | ||
- | ===== railsのコンポーネント ===== | + | ===== アップグレード |
- | * [[rails: | + | |
- | * [[rails: | + | |
- | * [[rails: | + | |
- | * [[rails: | + | |
- | * [[rails: | + | |
- | * [[rails: | + | |
- | * [[rails: | + | |
- | * [[rails: | + | |
- | * [[rails: | + | |
- | * [[rails: | + | |
- | * [[rails: | + | |
- | + | ||
- | Ajaxを使う(ちと情報が古いかも) | + | |
- | * http:// | + | |
- | * http:// | + | |
- | * http:// | + | |
- | ===== rake ===== | + | |
- | Rubyで作られたビルドツール(ruby make? | + | |
- | $ rake -T | + | |
- | + | ||
- | ==== アップグレード ==== | + | |
Railsのバージョンを上げたい。まず、 config/ | Railsのバージョンを上げたい。まず、 config/ | ||
$ rake rails: | $ rake rails: | ||
- | ===== script/ | + | ===== 自動生成 |
railsの各種アプリケーションモジュールはスクリプトで生成する。 | railsの各種アプリケーションモジュールはスクリプトで生成する。 | ||
行 89: | 行 116: | ||
script/ | script/ | ||
- | ===== 開発環境 | + | ====== Rails 3 ====== |
- | * [[http:// | + | Ruby on Rails 3に関する情報 |
- | * [[NetBeans]]にはRuby開発環境が存在する。gemのコントロールもできる。 | + | |
- | * [[http:// | + | |
- | ===== アプリケーション実行環境の構築例 | + | ===== インストール |
- | 基本的にpassengerで動作させれば大抵事足りる。 | + | * ruby 1.8.7 以降、あるいは ruby 1.9.2 以降をインストールする。 |
+ | * rubygemsをインストールする。 | ||
- | * [[ruby: | + | Railsとbundlerをインストールする。 |
+ | $ gem install rails | ||
+ | $ gem install bundler | ||
- | 手軽に負荷分散を行いたい場合((どーせ高価なロードバランサ買うカネなんてありませんよ!))は、リバースプロキシとしてApacheを置き、mod_proxy_balancerを使ってロードバランシングする。バックエンドのrailsの実行環境はmongrelかapache + passengerが良いだろう。 | + | 他の依存gemはbundlerで一括してインストールできるので、railsとbundlerのみをインストール。 |
- | railsの負荷分散する前にボトルネックがどこか調べる。大抵はrailsよりもDBがネックになる。DBが原因なら、DBを別サーバにする。それでもだめならmemcachedにデータをキャッシュ、さらに分散処理を考える。あまり更新されないページについてはキャッシュを使う。 | + | ===== アプリケーション作成 ===== |
+ | 新しいrailsアプリの作成 | ||
+ | $ rails new application_name | ||
- | メモリは十分に乗せよう。rails、passengerはメモリ使用量が大きい。 | + | データベースの種類を指定 |
+ | $ rails new application_name -d mysql | ||
- | Xenなどの仮想環境での運用には十分な慎重さが求められる。仮想環境ではディスク性能が全体のパフォーマンスに非常に大きな影響を与える。なぜならばCPUはマルチコア化で仮想化に対応しているが、ディスクは一つだからだ。IO負荷があまりに大きいとIO waitが跳ね上がってロードアベレージが100を越える事もあり、ホストOSすらも反応しなくなる。I/ | + | JavaScriptライブラリを入れない(標準のprototype.jsベースのライブラリではなく、[[http:// |
+ | $ rails new application_name -d mysql -J | ||
+ | |||
+ | テストライブラリを入れない([[# | ||
+ | $ rails new application_name -d mysql -T | ||
+ | ==== データベース作成 ==== | ||
+ | config/ | ||
+ | DBを作成(test と developmentのDBが作成される) | ||
+ | $ rake db:create | ||
+ | 全部作る場合 | ||
+ | $ rake db: | ||
+ | | ||
+ | productionだけ作る場合 | ||
+ | $ rake db:create RAILS_ENV=production | ||
+ | |||
+ | ==== RSpec-railsを使う ==== | ||
+ | Rails3でRSpecを使うには、rspec-rails v2 以降が必要。現時点(2010/ | ||
+ | |||
+ | [[# | ||
+ | gem ' | ||
+ | |||
+ | インストール | ||
+ | $ bundle install | ||
+ | $ rails generate rspec: | ||
+ | |||
+ | |||
+ | ==== jQuery-railsを使う ==== | ||
+ | :!: Rails 3.1ではjQuery-railsがデフォルトのため、以下の作業は不要である。 | ||
+ | |||
+ | [[# | ||
+ | |||
+ | gem ' | ||
+ | | ||
+ | インストール | ||
+ | $ bundle install | ||
+ | $ rails generate jquery: | ||
+ | |||
+ | |||
+ | HTMLで読み込ませる(app/ | ||
+ | <code ruby> | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | <%= stylesheet_link_tag :all %> | ||
+ | <%= javascript_include_tag :defaults %> | ||
+ | <%= javascript_include_tag " | ||
+ | <%= javascript_include_tag " | ||
+ | <%= csrf_meta_tag %> | ||
+ | </ | ||
+ | < | ||
+ | <%= yield %> | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | rails.jsを読み込んでいないとresourcesでPUTやDELETEを実行できないので注意 | ||
+ | |||
+ | ==== 自動生成 ==== | ||
+ | |||
+ | Scaffold | ||
+ | $ rails generate scaffold model_name name:string title: | ||
+ | |||
+ | Model | ||
+ | $ rails generate model model_name name:string title: | ||
+ | |||
+ | Controller | ||
+ | $ rails generate controller controller_name [action_name [action_name ... ]] | ||
+ | |||
+ | 作成したものを破棄 | ||
+ | $ rails destroy scaffold model_name | ||
+ | $ rails destroy model controller_name | ||
+ | $ rails destroy controller controller_name | ||
+ | |||
+ | ==== 開発用サーバ起動 ==== | ||
+ | $ rails server | ||
+ | $ script/ | ||
+ | |||
+ | railsコマンドは script/ | ||
+ | |||
+ | ===== railsコマンド ===== | ||
+ | ヘルプ | ||
+ | $ rails help | ||
+ | |||
+ | サブコマンドのヘルプ | ||
+ | $ rails server -h | ||
+ | | ||
+ | |||
+ | ===== Gemの管理 ===== | ||
+ | Rails3でライブラリを管理する場合、gemコマンドを直接叩くのではなく、bundlerというgemラッパーライブラリを使ったgem管理が推奨されている。 | ||
+ | |||
+ | 例えばデータベースにmysqlを指定してrailsアプリを作成した場合、mysql2というgemが必要になる。もしmysql2が入ってなければ | ||
+ | |||
+ | $ bundle install | ||
+ | | ||
+ | とするとmysql2のgemがインストールされる。 | ||
+ | |||
+ | bundleコマンドで管理されるライブラリはGemfileというファイルに記述されている。データベースにmysqlを指定してrailsアプリを作成すると、Gemfileにあらかじめmysql2が記述されているので bundle install で自動的にmysql2がインストールされるという作りになっている。 | ||
+ | |||
+ | <code ruby> | ||
+ | gem ' | ||
+ | | ||
+ | # Bundle edge Rails instead: | ||
+ | # gem ' | ||
+ | |||
+ | gem ' | ||
+ | |||
+ | # rubyist-aasmはgithubのリポジトリにあるのでsourceで指定する。 | ||
+ | # またGemの名前とモジュール名が異なっているのでrequireする名前を指定する。 | ||
+ | gem ' | ||
+ | |||
+ | # production環境では使わない(このオプションは廃止された、groupで指示する) | ||
+ | gem ' | ||
+ | |||
+ | # development環境で使う | ||
+ | group : | ||
+ | gem ' | ||
+ | end | ||
+ | |||
+ | </ | ||
+ | |||
+ | aasmはrubygems.orgにはなく、gems.github.comにあるので、sourceに追加する。 | ||
+ | <code ruby> | ||
+ | source ' | ||
+ | source ' | ||
+ | </ | ||
+ | |||
+ | sourceを指定せずにgitリポジトリを指定して直接取得できる。gemで公開されていないforkや最新版も取得できる。 | ||
+ | <code ruby> | ||
+ | gem ' | ||
+ | </ | ||
+ | |||
+ | ==== bundleでのgemインストール先 ==== | ||
+ | [[http:// | ||
+ | |||
+ | $ bundle install | ||
+ | |||
+ | ふつーにgemを使ったときと同じ場所にインストールされる。rootパスワードを聞かれる。MacOSXでは自分のパスワードで良いようだ。 | ||
+ | |||
+ | $ bundle install vendor/ | ||
+ | | ||
+ | とするとインストールディレクトリを指定できる。 | ||
+ | |||
+ | なお、一度vendor/ | ||
+ | |||
+ | < | ||
+ | --- | ||
+ | BUNDLE_DISABLE_SHARED_GEMS: | ||
+ | BUNDLE_PATH: | ||
+ | </ | ||
+ | インストール先を見るには | ||
+ | $ bundle show rubyist-aasm | ||
rails.1265093328.txt.gz · 最終更新: 2011/04/20 01:21 (外部編集)