2007/01/31

増加するログファイルへの対処


Railsでは、ログファイルに絶えず情報が追加されていき、ものすごい勢いで肥大化していくわけですが、でかいログファイルは様々な面でよくありません。

ですので、定期的にログファイルのローテーションをするわけですが、主にlogrotateを使用する方法と、Loggerを使用する方法があるようです。

ただし、FastCGIをマルチで使用している場合は、各FastCGIプロセスにてLoggerインスタンスが存在し、同一ログをローテートしてしまうため、Loggerの使用は控えたほうが良いようです。

というわけで、logrotateを使用します。

/path/to/your/app/log/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
copytruncate
create 0666 daemon daemon
}

参考:

DeploymentTips in Ruby on Rails

2007/01/30

ActiveRecodStoreな場合のセッションの掃除


Railsでは、セッションが自動生成されるのですが、自動削除はしてくれません。

ですので、自分で掃除をしなければいけません。


session_cleaner.rb

class SessionCleaner
def self.remove_stale_sessions
CGI::Session::ActiveRecordStore::Session.destroy_all(['updated_on < ?', 1.days.ago])
end
end

上記クラスをlibあたりに保存し、cronで毎日自動実行させます。

0 0 * * * ruby /full/path/to/script/runner -e production "SessionCleaner.remove_stale_sessions"


参考:

Removing Stale Rails Sessions


2007/01/29

Basic認証の解除


Apacheにて、Basic認証で制限をかけているけど、特定の場所では制限を解除したい。

そんなときには、解除したいディレクトリの.htaccessにて、下記のようにすると実現できます。

Satisfy Any

more Satisfyディレクティブ

2007/01/25

Bドライブ





なぜフロッピーのAの次は、ハードディスクのCドライブにいくのだろうと、前々から気にっていたのですが、解決。

昔はフロッピーが二台あったからでした。

そういえば、昔のパソコンは確かにフロッピーが二台あった。懐かしいなぁ・・・





なぜ今のパソコンにはBドライブがないのか?という理由 - GIGAZINE


2007/01/23

jpmobile使用時のfunctionalテスト



[03/18追記]



下記は何れも既に対応されております。ご苦労様です。

詳しくはdara日記 [jpmobile]をご覧下さい。




dara日記 - jpmobile - A Rails plugin for Japanese mobile-phones



jpmobileというプラグインを使用すると、携帯向けのサイト構築が非常に楽になります。

jpmobileを使用すると、以下のことができるようになります。


  • 携帯電話の判別

  • 端末位置情報の取得

  • 端末製造番号、契約者番号等の取得

  • IPアドレスの検証(キャリアが公開しているIPアドレス帯域からのアクセスか判定)




ものすごく便利なプラグインなのですが、functionalテスト時にはまりました。

NoMethodError: undefined method `mobile?' for #

mobile?そんなメソッドありません。とのことです。

で、悩んだ挙句導き出した答えは、
ActionController::TestRequest.class_eval { include Jpmobile::CgiRequestExpansion}

を、テストクラスにて記述します。

きっと、テスト用のリクエストにjpmobileの機能をincludeするってことだと思います(w)。



それと、ソフトバンク携帯からの実機確認時に、なぜか携帯端末と判定されないという問題が発生。

こちらは、vendor/plugins/jpmobile/lib/jpmobile/cgi_request_expansion.rb のSoftbank端末判定部分を

when /^Softbank/

から、
when /^SoftBank/

に修正しました。




2007/01/19

ハードウェアの安全な取り外し


WindowsXPを使っていて、タスクトレイにある「ハードウェアの安全な取り外し」アイコンが消滅してしまったことはないでしょうか。

僕自身は経験がないのですが、知人にはちらほら出現しています。

調べてみると、どうやらWindowsのバグのようで、完全に復活させる方法はないようです・・・。

ですが、以下のコマンドを「ファイル名を指定して実行」から実行すると、ウィンドウが表示され、安全な取り外しを行うことができます。

rundll32 shell32.dll,Control_RunDLL hotplug.dll

いちいちコマンドを入力するのは面倒なので、ショートカットを作成し、コマンドを実行できるようにするのがよいです。

2007/01/18

DateHelperでid属性を使いたい



RailsにはDateHelperという便利なものがありまして、これを利用すると簡単に日付や時刻のセレクトボックスを作成できます。

ですが、なぜかidや、class等の属性が無視されてしまいます。(Rails 1.1.6にて。最新のものはどうなの?)

javascriptで操作したいときなど、idがないと困ります。

そんなときは、下記のようにするとよいです。(bad hack!)


<%= select_day(Date.today, :prefix => 'search[date][day]" id="day_field', :discard_type => true) %>


参考:

Rails Forum / Ruby on Rails Help and Discussion Forum / How to give an ID to an input when using select helpers?


javascriptでwindowを閉じる


javascriptでwindowを閉じるには

window.close();

なわけですが、window.open()で開かれたウィンドウ以外は警告が表示されます。

そこで、以下のようにすると警告が表示されずに閉じてしまいます。
var w = window.open('', '_top');
w.opener = window;
w.close();