By ZUIFU Blogger 2012年1月13日 Leave a Comment

Ruby_on_Rails_logo1

前回までに Ruby on Railsの実行環境構築の手順を、

  1. Ruby on railsを使ったシステム環境構築(CentOS5.5,MySQL5.0,nginx)【1】
  2. Ruby on railsを使ったシステム環境構築(CentOS5.5,MySQL5.0,nginx)【2】
  3. Ruby on railsを使ったシステム環境構築(CentOS5.5,MySQL5.0,nginx)【3】

に、セットアップ時に遭遇したエラー対処方法の一例として掲載しましたが、振り返って環境構築時の注意点を整理したものを掲載。

■環境構築時のポイント:OSセットアップ後、やっておくこと。

  1. rootではなく、Railsアプリ実行用のユーザを作成してsudoersに登録したうえで行う。
     普通の事と言えばそれまでだが、後述の「Passengerは、root権限でRailsアプリケーションを動かせない仕様になっている。」に関連して明記。
  2. 以下の必要なものを事前にインストールしておく。
    ※下記のVMWare Appliance Serverで検証を行い、依存関係のあるライブラリは、yumで纏めてインストールしました。
    「CentOS 5.5 i386 – minimal installation (only base system) 」
    http://virtual-machine.org/vmware-image-centos-55-i386-download
      a. mysql-server.i386
      b. mysql-devel
      c. gcc.i386
      d. zlib.i386
      e. zlib-devel.i386
      f. gcc-c++.i386
      g. curl-devel.i386
      h. http://pyyaml.org/download/libyaml/yaml-0.1.4.tar.gz
      i. ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.13.tar.gz
  3. SELinuxが有効な場合、設定が影響するため適切に設定するか、セットアップ時はdisabledにしておく。
  4. Firewall(iptables)が有効な場合、リモートホストのブラウザアクセスの確認用に、80と3000のポートを開放しておく。

■Rails, MySql, Passenger, nginxを利用したアプリケーションの特徴

  1. Passengerは、root権限でRailsアプリケーションを動かせない仕様になっている。
     Railsではenvironment.rbの所有者がアプリケーションの実行ユーザになるが、rootの場合nobodyユーザで実行される。この場合logフォルダや、tmpファイル等で書き込みができずエラーになるため、適切なユーザとパーミッションを設定する必要がある。
  2. Railsアプリケーションはデフォルトで、”development”モードで実行されるが、Passengerでは”Production”モードで実行される。
  3. Railsの開発用のモードでは、デフォルトでキャッシュが無効化されている。
  4. Railsアプリケーションが開発用で実行されていても、Webサーバがキャッシュしている場合があり、その場合はnginxを再起動して修正後の挙動の確認を行う必要がある。
  5. トランザクションを意識した実装の場合、MySQLのストレージエンジン:MyISAMは、トランザクションに対応していないため、InnoDBを使用する。
  6.  

  7. レコードを保存するためのメソッドには、”save”と”save!”があり、結果の返し方が異なる。
       save  : true/falseで返す
       save! : 保存に失敗した場合、例外を返す
  8. テーブルのリレーションと命名規則
       ・外部キー列は、「参照先のモデル名_id」(例:blog_id)
       ・中間テーブルは参照先のテーブル名を「_」で連結したもの。連結順は辞書順。(例:authors_blogs)
    ※中間テーブルとは、別名「結合テーブル」ともいい、テーブル間をn:nで関連付けするためのレコードを保持するためのテーブル。
  9. モデル名に対応しないテーブル名を設定することも可能。ただしやむを得ない場合にのみ使用することを推奨。
  10. 手作業でマイグレーションファイルを作成する場合の注意点
      a. ファイル名とクラス名は対応関係にある
      b. ActiveRecord::Migrationクラスを継承していること
  11. rakeコマンドでスキーマをrubyスクリプトやsqlで取得可能
      a. rubyスクリプトでスキーマ取得

       rake db:schema:dump
    

      b. sqlでスキーマ取得

       rake db:structure:dump
    
  12. railsのgenerateコマンドは、カスタマイズ可能
      /lib/templatesフォルダに展開されているので、rubyスクリプトを編集すればOK。
  13. 2重レンダリングの場合、「Render and/or redirect were called multiple times in this action」が発生する。
     ⇒if文の処理経路によって、renderが複数回呼ばれるケースが発生しないように注意。
  14. respond_toメソッドで利用できるフォーマットは、Railsの「action_dispatch/http/mime_types.rb」で定義されている。
  15. 署名付クッキーを利用する場合、クッキーを署名/検証するときに利用するトークンを、
        config/initializers/secret_token.rb配下の
    Rails.application.config.secret_tokenパラメータを設定しておく必要がある。
  16.  

  17. 基本認証より高い認証を求められる場合には、”authenticate_or_request_with_http_digest”メソッドを利用して、ダイジェスト認証が利用可能。
  18. ログアウト機能は、セッション破棄”reset_session”でOK。
  19. エラーページのカスタマイズは、 “public/404.html”や”pblic/405.html”などのエラーコードに対応したhtmlをカスタマイズすればOK。
  20. ページキャッシュはクエリ情報を認識しない。
    ページの内容を左右するような情報をクエリ情報で表現しないようにする。URLで表現できるような、ルート設計が望ましい。
  21. route.rbでルート設定を行う際、ルートの優先順位はルートの記述順序によって決まる。
  22. ルーティングの挙動は、assert_generatesメソッドで確認できる。
  23. Railsでテストデータは、フィクスチャ(test/fixtures以下)にymlで用意し、テスト実行時に自動的に展開される。
  24. RailsのUnitテストでトランザクション処理を伴うテストを行う際、デフォルトはトランザクション処理を伴うテストは意図されていないため、use_transactional_fixturesパラメータをfalseに設定し、フィクスチャの処理にトランザクションを利用しないようにする必要がある。

以上、ざっくりとではありますが、Railsアプリケーション開発時のポイントまとめでした。

本記事の内容は、下記書籍に詳細に説明されています。

Ruby on Rails 3 アプリケーションプログラミング 山田 祥寛 (著)



Leave a Reply

(required)

(required)