Railsでx_sendfileを使う

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

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

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

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

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

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

導入手順

  • apacheにmod_xsendfileを組み込む
    https://tn123.org/mod_xsendfile/
    wget https://tn123.org/mod_xsendfile/mod_xsendfile.c
    sudo apxs2 -cia mod_xsendfile.c
    sudo a2enmod xsenfile
  • apacheの設定ファイルを変更
    とりあえず、設定ファイルにxsendfile用のディレクティブを追加

    XSendFile on
    XSendFilePath /home/test/products/files
  • Railsのソースでsend_fileしているところにオプションを指定
    とりあえずテスト用にpaの処理に変更を加える

    send_file path.to_s, :type=>'image/gif', :disposition => 'inline', :x_sendfile => true

    という感じで。

  • apache再起動
    sudo apache2ctl restart