Presentation is loading. Please wait.

Presentation is loading. Please wait.

Rails tips 2007-01-20 氏久 達博. 注 この資料は後で読む用に 作られており、プレゼン 時にスクリーンに映るも のと内容が若干異なりま す。

Similar presentations


Presentation on theme: "Rails tips 2007-01-20 氏久 達博. 注 この資料は後で読む用に 作られており、プレゼン 時にスクリーンに映るも のと内容が若干異なりま す。"— Presentation transcript:

1 rails tips 2007-01-20 氏久 達博

2 注 この資料は後で読む用に 作られており、プレゼン 時にスクリーンに映るも のと内容が若干異なりま す。

3 自己紹介 氏久 達博 「うじひさ」 ujihisa@gmail.com 大阪大学の大学院生 奈良・香川・長崎出身の大阪人

4 自己紹介 Ruby 歴 : 2006 年 6 月から Rails のため Ruby を勉強 それ以前は Perl, PHP など 株式会社アジャイル ( 元 ) Haskell 勉強会を企画 次回は 1 月 28 日 ( 日 )

5 『 rails tips 』 対象 : Ruby on Rails を使いは じめてみたものの、本格的な アプリケーション開発はこれ からという人 内容 : ハマりどころ回避方法, 事例紹介など

6 HTML 出力エスケー プ AR, フォーム (params), cookie な ど由来のデータをそのまま出力す るのは危険。 → クロスサイトスクリプティング ERB::Util#h で、きちんとエス ケープしましょう。

7 HTML 出力エスケー プ View で ') %> みたく毎回 h をつけるのは面倒 だし、美しくない。 (h があるのがふつうで、ないのはむしろ例外的 )

8 HTML 出力エスケー プ プラグインに頼ろう! write less code!

9 HTML 出力エスケー プ autoescape プラグイン : デフォルトで h がかかる。 ( 正確には CGI.util#escapeHTML) タグ除去 ( なにもしなくていい ) そのまま model で acts_as_raw :name もしくは 安全、破壊的

10 HTML 出力エスケー プ autoescape プラグイン : 対象は AR 由来データのみ (after_find でフィルタリング ) acts as raw な要素がなくても acts_as_raw 宣言が必要 汚い …?

11 HTML 出力エスケー プ Safe ERB プラグイン : AR 由来の値や、リクエスト由来の値を h を使 わずに表示しようとすると例外を発生する。 タグ除去 そのまま controller 等で @user.name.untaint し てから 安全、非破壊的

12 HTML 出力エスケー プ inverse h プラグイン : プラグインがあるだけで、全ての view の h ありと h なしが逆転。 タグ除去 そのまま 安全、非破壊的、自然 誰か作ってください

13 CSS/JS での画像指 定 例 : CSS にて background:url('/images/a.jpg'); http://localhost:3000/ では OK http://*********/app1/ では NG ( 相対パス問題 )

14 CSS/JS での画像指 定 ● 解決策 1 CSS に対応する View を用意して ERb で記述する。 background:url( ); application.rhtml で 'main') %> http://wota.jp/ac/?date=20050808

15 CSS/JS での画像指 定 ● 解決策 2 Relative Path Plugin の スタティックファイルフィルタ機能を使う。 ( 正規表現で置換 ) ※ WEBrick, Mongrel 限定! http://d.hatena.ne.jp/cuzic/20061126/1164512678

16 CSS/JS での画像指 定 ● 解決策 3 javascript 側で対応。 ( 美しくない )

17 CSS/JS での画像指 定 " きれいな " 解決策は ないものか … public 以下でも ERb が 使えるように拡張するとか?

18 振舞駆動開発 ・ Rails でも BDD: Behaviour Driven Development ・ RSpec については 先月の Ruby 勉強会を参照

19 振舞駆動開発 RSpec on Rails の例 : require File.dirname(__FILE__) + '/../spec_helper' context " モデルのユーザクラスについての仕様 " do fixtures :users setup do @user = User.find users(:ujihisa).id end specify " 氏久は 22 歳のはず " do @user.age.should_be 22 end

20 振舞駆動開発 RSpec on Rails の実行 : $ rake spec RAILS_ENV=test または、 (1) spec サーバを立ち上げておいて $ ruby script/rails_spec_server (2) 別ターミナルで実行 $ ruby script/rails_spec spec/models/*

21 振舞駆動開発 RSpec on Rails の良いところ : ・ assert_* じゃなく should_* ・ context, specify で日本語が 使える柔軟性 ・ Rails の環境設定を再読込み しないので、超高速

22 振舞駆動開発 RSpec on Rails の穴 : ・日本語のドキュメントが ほとんどない ・ rails_spec_server が C-c で 終了しない。バグ? ・ rake spec すると development 環境 の DB データが fixtures で上書き!

23 デプロイ ( 配置 ) Rails 関連書籍では、なぜか デプロイ関係の記述が非常に 少ない。 →blog など、 Web 上の情報に頼 らざるを得ない

24 デプロイ ( 配置 ) ・早めの SwitchTower ・手作業でのデプロイは かなり面倒。

25 はじめてのデプロイ ありがちな道のり ( これでも順調 ) (1) svn/cvs/ftp とかでアップロード (2) パーミッション変更 (log, tmp) (3) rake db:migrate RAILS_ENV=production (4) (rake db:fixtures:load RAILS_ENV=production) (5) (apache+cgi で動作確認 ) (6) public/.htaccess 書き換え (7) apache+fcgi で動作確認 (8) あれ、動かない … (9) log 見たりして確認、修正、 etc...

26 はじめてのデプロイ たくさんあるハマりどころ ・ production 環境への設定し忘れ ・ php と違って、普通に apache 使うだけというのはむしろ異端 ( apache mod_proxy + lighttpd とか ) ・相対パス問題 (Relative Path Plugin 使いましょう ) ・ public/index.html 削除し忘れ (public 以下は優先される静的ファイル ) ・ポートの競合 (lighttpd を 80 で起動しようとしたら apache と競合 ) ・そもそもサーバに Ruby, rubygems, rails, fcgi などをインストールしなきゃ ならない (php とか PEAR なら今はどこでも最初から入ってる ) ・ ssh 使えるのが前提 ( 一応なくてもできるけど、とっても不便 ) ・ etc... よくあるレンタルサーバで すぐ使えるようなモノじゃない

27 はじめてのデプロイ 出先でも使える、自分のための プライベートな Web アプリ → 作ってはみたものの、 どうやって運用する? ・専用サーバ借りる ・自宅サーバ構築する

28 はじめてのデプロイ rails の問題点 : 「とりあえず公開」が できない これが出来ると rails はもっと広 く普及するのでは … ?

29 Just in Time on Rails 作ってみました http://jitor.net/ 作った rails アプリを圧縮して アップロードするだけ

30 Just in Time on Rails α 版 無料, 無保証 Linux + Pound + Mongrel + SQLite3

31 Just in Time on Rails 1 アプリ 1 ポート、 サブドメインに割り当て http://***.jitor.net/ 悪用しないでね

32 事例紹介 : HighTube 動画配信システム http://subarism.net/ http://botanical-garden.hightube.jp/ など多数 開発 : ( 株 ) アジャイル ( 株 ) 京都三条ラジオカフェ

33 事例紹介 : HighTube HTML 出力エスケープ ふつうに h 使ってる CSS/JS での画像指定 CSS は舞波方式、 JS は JS で

34 事例紹介 : HighTube テスト駆動開発 デプロイ : cron & Subversion 構成 Linux + {Apache mod_proxy + Lighttpd, Pound + Mongrel} + MySQL + Rails 1.1.6}

35 事例紹介 : HighTube 『京都総文』 2006 年 7 月に PHP + Maple で開発 開発期間は 3 週間 メインスタッフは 2 人

36 事例紹介 : HighTube 『京都府立植物園』 2006 年 10 月に、いろいろと 機能追加したものを rails で作り直し 開発期間は 2 週間 メインスタッフは 3 人

37 おわり ご清聴ありがとうございました。


Download ppt "Rails tips 2007-01-20 氏久 達博. 注 この資料は後で読む用に 作られており、プレゼン 時にスクリーンに映るも のと内容が若干異なりま す。"

Similar presentations


Ads by Google