Railsでx_sendfileを使う

Railsでsend_fileというメソッドがある

これは、ファイルなどをそのまま返す場合に使ったりするが

これを使うとRailsのメモリ使用量が増加していく。

2.1でこの現象が出るが 2.3とかもかも?

なんかメモリを解放してないっぽい感じですが、これに関しては、ほかの方が調べてたりするので深く調べないことにする。

で、解決方法は、x_sendfileを使うのがスマートな気がするので、これを採用する。

導入手順

  • apacheにmod_xsendfileを組み込む
  • apacheの設定ファイルを変更
    とりあえず、設定ファイルにxsendfile用のディレクティブを追加
  • Railsのソースでsend_fileしているところにオプションを指定
    とりあえずテスト用にpaの処理に変更を加える

    という感じで。
  • apache再起動

ベリサイン(verisign)のクロスルートでのSSL設定について

ベリサインSSL証明書で携帯もやりたいので、クロスルート中間証明を入れる。

クロスルートとはどーいう事かというと、

「セキュア・サーバID」公開鍵長2048bit対応の端末の場合
2048bitの対応端末ではルート証明書は「Class 3 Public Primary CA – G5」に変更となり、サイト証明書との間に中間証明書が入る3階層となります。
Class 3 Public Primary CA – G5
Class 3 Secure Server CA – G3
サーバ証明書

「セキュア・サーバID」公開鍵長2048bitに未対応の端末
2048bitのルート証明書「Class 3 Public Primary CA – G5」を搭載していない未対応の端末では、最上位に「Class 3 Public Primary CA」を追加して4階層となります。
Class 3 Public Primary CA
Class 3 Public Primary CA – G5
Class 3 Secure Server CA – G3
サーバ証明書

実際にどのように設定するかというと
以下のURLにあるクロスルート設定用証明書を中間証明書に設定します。

https://www.verisign.co.jp/repository/intermediate.html

中間証明書のファイルを開くと

このような構成になっています。

ここに

という感じで追加します。

この中間証明書とクロスルート設定用証明書の位置には意味があります。
上下逆だと、うまく機能しません。

参考資料:日本ベリサイン SSLサーバ証明書 階層構造[PDF]

日本ベリサイン SSLサーバ証明書 階層構造

Apache(2.2系)でSSL接続(なんちゃって、個人認証編)

ApacheでSSL接続をするために、SSL個人認証を入れる。

opensslで秘密鍵(server.key)を作成

サーバー用公開鍵(server.csr)作成

このコマンドを実行すると、いくつか設定する項目が表示されます。

設定の内容

個人認証局の作成-認証局の鍵の作成

個人認証局の作成-認証局の証明書の作成

※365というのは、期限なので、この場合は1年という事になる

設定の内容

※Common Name (eg, YOUR name) []:は先につくったserver.csrと別の名前にしないとうまく動かないそうです。

サーバーの証明書を作成

httpd.confを編集
SSLのLoadModuleを有効化
以下を追加(先頭に#がついてコメントになっているかも)

サーバ名の設定
ServerNameの項目を有効にして、サーバの名前を設定する

conf/extra/http-ssl.confの編集
※もしかしたら、存在しないので、そのときはhttpd.confの最後に追加するか、新規にssl.confファイルを作ってhttpd.confでInclude ssl.confなどとする
サーバ名と管理者のメールアドレスをhttpd.confと同じように変更。

証明書の指定

秘密鍵の指定

CA証明書へのパス設定

エラー「SSL received a record that exceeded the maximum permissible length」が出る

SSL received a record that exceeded the maximum permissible length

このエラーは、VirtualHostでSSL参照させる設定のIPが間違えているときに出る

openssl 0.9.8oで、携帯からSSL接続が出来ない?

先日、携帯の一部機種からSSL接続が出来ないという障害があり

未だ解決していないのだが、

Ubuntu11.04(デフォルトで0.9.8oが入る)に古いリポジトリ読ませて0.9.8kを入れた所、それでもSSL接続出来なかった。関連するライブラリまでダウングレード出来てたかどうかは不明ですが。

どうやらopensslのバージョンで挙動が変わるみたいだ。

手元にある検証環境で実験したところ

0.9.8kは接続可能だった

0.9.8oでは接続が出来なかった。

もちろん、PCから接続した場合は両方とも接続可能なことは確認してある。

この、kとoの違いで、携帯から接続できるか出来ないかが決まるのはなかなかシビアだと思うのだが、実際そのような症状が出ている。

http://www.nttdocomo.co.jp/service/developer/make/content/ssl/notice/index.html#p04

こののドコモのサイトでは、「0バイトコードデータの暗号化について」
ということで、0バイトコードデータを暗号化する際のロジックがバージョン毎に若干変わっているらしく、sslのバージョンによる接続障害についての説明がある。

だが、今回は0.9.8なので、当てはまらない。

であるが、このサイトの表を見る限り、0.9.6dのみが接続出来ない症状が出てて、cやeだと問題ないという感じなので、今回もこのようなピンポイントなバージョンの障害である可能性が高い。

 

とりあえず、opensslのバージョンを0.9.8kまで落とせば接続可能であると思われる。

Ubuntu 10.04にしてテスト環境を構築したところ、やはり接続が可能なので、何らかのプロダクトのバージョンに不具合がある物と思われる。

IE6でoverflow:hiddenを使ったときに、うまくhiddenにならない

IE6 で、divタグにoverflow:hiddenを指定したにもかかわらず、中身がhiddenにならない場合がある。

といった感じのHTMLがあり、cssで、

という感じでスタイルを指定したときに、iE6では、sotoで指定したoverflow: hiddenが効かないというバグがある。
これは、どのような現象で発生するかというと、中のタグ、今回ではnakaのタグでposition: relative;を指定してる場合に
外側のタグ、今回ではsotoにposition: relative; が無い場合である。
解決する方法としては、外側のタグ(soto)にもposition:relative; を付けることで、overflow:hidden; が適用されるようになる。

 

 

という感じで、記事検証用にちょっとサンプル作ってみたが、何故かhiddenがちゃんと適用されてしまう。

ま、実際他のところでは出てて、直したので記事を書いているのだが、サンプルで再現しないのはなぜだ。。他にもhiddenにならない要素があるのかもしれない。

今後の調査課題。

 

FireFoxの起動オプション(編集中)

FireFoxを起動するときのオプションについて

  • -no-remote
    -no-remote 付きで起動されたものに対しては, 外部からリンクを渡してそれを開くことができない
  • -p [プロファイル]
    プロファイルを指定
    引数のプロファイルを指定しない場合、プロファイルマネージャを起動

サイトマップのファイルを分割して置いておく

サイトマップのファイルを分割して置いておく場合

#sitemap.xml

と書いて、sitemap1.xmlファイルの中に実際の一覧を書き込む

#sitemap1.xml

とする

 

htmlの要素を左右中央に固定する

ブラウザのサイズを変えてもコンテンツを左右中央に表示する方法

wrapperを左右中央に表示する場合

スタイルで