Ruby on Railsでの開発でつまづいたこと(メモ)

体重管理サービス「hakatter」を開発中です。プログラミングをしていると、たくさんの「なんかよくわからないけど、動かない」という場面に遭遇します。そんなとき、ネットや書籍も参考になるのですが、自分の環境に合った答えをみつけるまでに、とても苦労します。そんなわけで、簡単にメモ。

検索などでこのページにたどりついた方のために、僕の環境を書いておきます。

■開発環境と実行環境

  • Mac OS X 10.4
  • Apache / 1.3.33
  • ruby 1.8.6
  • Rails 1.2.3

■CSS関連

  • デフォルトではフォームの下端に余白ができるのでCSSで消す。
  • 全ての要素の余白を“ * {margin:0; padding:0;} と初期化できる。
  • フォームのテキスト入力欄の幅はブラウザの種類によって変わるが、CSSでピクセル単位で指定するとそろう。
  • 同じようなものを並べるときは、tableタグでレイアウトするのではなく、ulやliなどの箇条書きをCSSでレイアウトする。
  • WindowsのIEとMacのSafariとは、文字表示やフォントが全く違うので、どちらの表示も満足させるCSSの指定は難しい。
  • CSSを無効にしたとき、平文でも構造化されたHTMLが出てくるとうれしい。
  • view/layoutにあるレイアウト用のrhtmlファイルの先頭行を次のようにする。 <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN”“http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”> <html xmlns=”http://www.w3.org/1999/xhtml” xml:lang=”ja” lang=”ja”>

■Ruby on Railsの動きについて

  • ブラウザからアクセスがあると、新しくコントローラのインスタンスが作られる。コントローラの処理によって、表示するデータを用意して、ビューやヘルパーに渡してHTMLを描画する。
  • コントローラ > ビュー (ヘルパー) の流れまでは、インスタンス変数(@で始まる変数)の内容は保持される。1つのアクセスに対する処理が終わったらすべて消えてしまう。
  • 次の画面(Ajax含む)へ情報を渡したいときは、フォームやリンクに情報を埋め込むか、セッション情報を使う。
  • ファイルのアップロードを行うと、10KB以下のものはStringIOオブジェクトとして、10KB以上だとTempFileオブジェクトが生成される。StringIOオブジェクトの場合は、localpathメソッドが使えないため、画像ファイルの変換など、ファイル名が必要なときは自分で保存しておく。

■Ajax関連

  • タグの正しい入れ子の順番は<div><form><table><tr><td>。

■ページめくりの処理を自前で行う

  • ページめくりの処理を自分で書くには、1ページの項目数 > 全体の項目数 > 最終ページ番号 > 表示するページ番号 > 表示する最初の項目の位置、の順に求める。

■Ruby on RailsをApacheで動かす

  • デバッグに多用する p メソッドは、Apacheサーバーでは Malformed header というCGIのエラーになるので、公開時にはすべて消しておくこと。
  • 何かエラーが起きたとき、ブラウザ画面上には「サーバーエラー」としか表示されない。詳細はApacheのログファイルを見ないと分からない。
  • Apacheのエラーログは /var/log/httpd/errorlog にある。
  • 公開前に、tmpフォルダ、logフォルダの中身はすべて消しておくこと。中身が残っているとエラーの原因になる。
  • tmp、logフォルダに対して、wwwユーザーが読み書きできるようにしておくこと(“chmod -R a+w tmp”“chmod -R a+w log”)。

■Rubyの日本語処理

  • environment.rb に ”$KCODE=’u’と設定してUTF-8環境で動くよう明示しておく。ターミナル画面への出力や、正規表現ライブラリなどはここを参照して動く。
  • UTF-8の日本語文字は1文字が3バイト

関連する記事

このサイトの内容は私の個人的な見解であり、私の所属するいかなる団体や組織の見解を反映しているものではありません。