守破離でいこう! -Let's go with SyuHaRi!-

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

ラベル:

automatically translated by Google Translate Hack!

naoki 16:00 | 0 comments |
HaloScan: |

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

ラベル:

automatically translated by Google Translate Hack!

naoki 15:15 | 0 comments |
HaloScan: |

2007/01/29

Basic認証の解除

Apacheにて、Basic認証で制限をかけているけど、特定の場所では制限を解除したい。
そんなときには、解除したいディレクトリの.htaccessにて、下記のようにすると実現できます。

Satisfy Any
more Satisfyディレクティブ

ラベル:

automatically translated by Google Translate Hack!

naoki 14:34 | 0 comments |
HaloScan: |

2007/01/25

Bドライブ


なぜフロッピーのAの次は、ハードディスクのCドライブにいくのだろうと、前々から気にっていたのですが、解決。
昔はフロッピーが二台あったからでした。
そういえば、昔のパソコンは確かにフロッピーが二台あった。懐かしいなぁ・・・

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

ラベル:

automatically translated by Google Translate Hack!

naoki 16:58 | 0 comments |
HaloScan: |

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/
に修正しました。

ラベル:

automatically translated by Google Translate Hack!

naoki 13:50 | 0 comments |
HaloScan: |

2007/01/19

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

WindowsXPを使っていて、タスクトレイにある「ハードウェアの安全な取り外し」アイコンが消滅してしまったことはないでしょうか。
僕自身は経験がないのですが、知人にはちらほら出現しています。
調べてみると、どうやらWindowsのバグのようで、完全に復活させる方法はないようです・・・。
ですが、以下のコマンドを「ファイル名を指定して実行」から実行すると、ウィンドウが表示され、安全な取り外しを行うことができます。

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

ラベル:

automatically translated by Google Translate Hack!

naoki 10:21 | 0 comments |
HaloScan: |

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?

ラベル:

automatically translated by Google Translate Hack!

naoki 15:54 | 0 comments |
HaloScan: |

javascriptでwindowを閉じる

javascriptでwindowを閉じるには

window.close();
なわけですが、window.open()で開かれたウィンドウ以外は警告が表示されます。
そこで、以下のようにすると警告が表示されずに閉じてしまいます。
var w = window.open('', '_top');
w.opener = window;
w.close();

ラベル:

automatically translated by Google Translate Hack!

naoki 14:50 | 0 comments |
HaloScan: |