Archive

Archive for 7月, 2009

Railsでiphoneからのアクセスを振り分け

7月 31st, 2009

Rails2.3.3で確認
[追記1] set_iphone_formatにviewファイルを振り分ける記述を追記
[追記2]振り分けれてなかったので修正…

RUBY:
  1. # config/initializers/mime_types.rb
  2. # 以下の行のコメントを外す
  3. Mime::Type.register_alias "text/html", :iphone
  4.  
  5. ###
  6. # application_controller.rb
  7.   # iphone/ipod touchからのアクセスかどうか(ちょっと適当っぽい)
  8.   def is_iphone_request?
  9.     request.user_agent =~ /(Mobile\/.+Safari)/
  10.   end
  11.  
  12.   # iphone/ipod touchだったらiphone向けに表示切換え
  13.   def set_iphone_format
  14.     if is_iphone_request?
  15.       request.format = :iphone
  16.     end
  17.   end
  18.  
  19. ###
  20. # hoge_controller
  21.   def index
  22.     ...
  23.     respond_to do |format|
  24.       format.html
  25.       format.iphone
  26.     end
  27.   end

こんな感じにしとくと、iphoneからのアクセスでは
views/layout/application.iphone.html.erb
views/hoges/index.iphone.html.erb
を描画してくれます

#iphone用のディレクトリを用意してそこに*.iphone.html.erbを全部ぶっ込んで使うにはどうすればいいんだろう…
#iphone用コントローラとか作りたくないし;

,

[Rails]HelperのメソッドをControllerで使う

7月 30th, 2009
RUBY:
  1. class HogeController <<ApplicationController
  2.   include HugaHelper
  3.   ...
  4. end

でHugaHelperのメソッドが(ついでにViewでも)使えるようになります

helper :huga
との違いはControllerでも使えるようになる点です
(helperで呼ぶとViewだけで使えるようになる)

SQLでNULLの検索や除外

7月 30th, 2009

SQLではWHERE句で検索条件を指定しますが、その際にNULLを扱う場合について調べました
というのも、普通に

SQL:
  1. SELECT * FROM users WHERE clm = NULL

だと取り出せません

SQL:
  1. SELECT * FROM users WHERE clm IS NULL

とすることで取り出せます(否定はIS NOT NUL)

Rails更新後に500 internal server error | undefined method `rewind’

7月 23rd, 2009

Passenger2.1.2でRailsを2.3.3にしてアクセスしたらこんなエラーが出てました
画面上の出力は500エラーだけでログに書いてあったのがundefined method `rewind'というエラー
これはRackが吐いてるエラーで、どうやらPassengerの古いverを使ってると遭遇するようです

undefined method `rewind'

ようはPassengerを最新にすればいいだけです

TEXT:
  1. sudo gem install passenger
  2. sudo passenger-install-apache2-module

そしてhttpd.confを修正してapache2を再起動したら直りました
#何故かsudo gem update passengerでは駄目でした;

,

Cache周りの設定

7月 23rd, 2009

Rails2.3.3のキャッシュ周りのお話
environments/development.rbなんかに記述します

RUBY:
  1. # キャッシュを有効に
  2. config.action_controller.perform_caching = true
  3.  
  4. # フラグメントキャッシュの保存先
  5. # 最新のverではこういう指定方法になったそうです…数時間はまってました;
  6. config.action_controller.cache_store = :file_store, "#{RAILS_ROOT}/tmp/cache"
  7.  
  8. # ページキャッシュの保存先
  9. # ここを変えただけだとpageキャッシュが無効になります(mod_rewriteで変更先にキャッシュを読みに行くよう設定する必要があります)
  10. # config.action_controller.page_cache_directory = "#{RAILS_ROOT}/tmp/cache/page"

verごとに微妙に仕様が変わっててげんなりしました…orz
今後確実にキャッシュは使っていくはずなのでしっかり覚えておきたいですね
キャッシュの詳しい使い方はまた今度まとめようと思います

,