コレグレーデギネード

WindowsとかUbuntuとかRubyとかRailsとか

サーバーログのStarted GET "/assets/***.css?body=1"とServed asset /***.css - 304 Not Modifiedを何とかしたい。

前記事「「WEBricの環境でサーバーログに「WARN Could not determine content-length of response body.」多発」の途中で投げ出した、assetsのログを何とかしようと思う。
こんなのがズラリ。

Started GET "/assets/rails.png" for 127.0.0.1 at 2012-05-10 15:13:19 +0900
Served asset /rails.png - 304 Not Modified (34ms)

Started GET "/assets/application.css?body=1" for 127.0.0.1 at 2012-05-10 15:13:37 +0900
Served asset /application.css - 304 Not Modified (6ms)

Started GET "/assets/scaffolds.css?body=1" for 127.0.0.1 at 2012-05-10 15:13:37 +0900
Served asset /scaffolds.css - 304 Not Modified (2ms)

Started GET "/assets/users.css?body=1" for 127.0.0.1 at 2012-05-10 15:13:37 +0900
Served asset /users.css - 304 Not Modified (16ms)

Started GET "/assets/jquery.js?body=1" for 127.0.0.1 at 2012-05-10 15:13:37 +0900
Served asset /jquery.js - 304 Not Modified (57ms)

今回もmori_devさんのサイトを参考にさせて頂きました。m(_ _)m
http://d.hatena.ne.jp/kitokitoki/20120407/p1

プロジェクト内のconfig/initializersの中に新たに「quiet_assets.rb」を作成する。
いかにも黙りそうですな。

Rails.application.assets.logger = Logger.new('/dev/null')
Rails::Rack::Logger.class_eval do
  def call_with_quiet_assets(env)
    previous_level = Rails.logger.level
    Rails.logger.level = Logger::ERROR if env['PATH_INFO'].index("/assets/") == 0
    call_without_quiet_assets(env).tap do
      Rails.logger.level = previous_level
    end
  end
  alias_method_chain :call, :quiet_assets
end

サーバー再起動で確認OK。

RVMでgemsetがglobalに戻ってしまう。

global以外のgemsetを複数管理していて、
例えば「rails3」というgemsetを使いたいなーという場合の切り替えは、

$ rvm gemset use rails3
Using ruby-1.9.3-head with gemset rails3

とすればいいのだが、PCやターミナルを起動するたびにrvm...とコマンドをたたくのはめんどい。しかもプロジェクトごとに違うのでは間違ってしまう場合もある。どうすればいいんだ?と思い、ググって解決方法見つけました。
参考:rvm のgemsetをおさらい(Mac でRuby) - たぐってつづる 謝謝!

プロジェクトのディレクトリ直下に以下の内容で「.rvmrc」というファイルを作成する。

rvm use ruby-1.9.3-head@rails3

これで、プロジェクトのディレクトリに入ると自動でgemsetを切り替えてくれるようになる。

$ cd sampleapp
====================================================================================
= NOTICE                                                                           =
====================================================================================
= RVM has encountered a new or modified .rvmrc file in the current directory       =
= This is a shell script and therefore may contain any shell commands.             =
=                                                                                  =
= Examine the contents of this file carefully to be sure the contents are          =
= safe before trusting it! ( Choose v[iew] below to view the contents )            =
====================================================================================
Do you wish to trust this .rvmrc file? (/home/username/sampleapp/.rvmrc)
y[es], n[o], v[iew], c[ancel]> y
Using ruby-1.9.3-head with gemset rails3

一度NOTICEが表示され、rvmの設定ファイルを読み込むかどうか問われる。
これにより切り替わることが確認できる。

試しに別のgemsetを用意。
Gemset名 rails2r187
Rubyバージョン1.8.7-head
Railsバージョン2.3.8 # 2.x系の環境が無かったのでインストール。

$ rvm use 1.8.7-head
Using /home/username/.rvm/gems/ruby-1.8.7-head

$ rvm gemset create rails2r187
'rails2r187' gemset created (/home/username/.rvm/gems/ruby-1.8.7-head@rails2r187).

$ rvm gemset use rails2r187
Using ruby-1.8.7-head with gemset rails2r187

$ rvm gemset install rails --version 2.3.8
installing rails 2.3.8...
rails 2.3.8 installed.

sampleapp02というディレクトリを作成。その中にRVMの設定ファイル「.rvmrc」を作成。

$ mkdir sampleapp02
$ vim ./sampleapp02/.rvmrc
-.rvmrcの内容----------------------
rvm use ruby-1.8.7-head@rails2r187
-----------------------------------

gamsetを確認する。

$ rvm gemset list_all
gemsets for ruby-1.9.3-head (found in /home/username/.rvm/gems/ruby-1.9.3-head)
   global
   rails3

gemsets for ruby-1.8.7-head (found in /home/username/.rvm/gems/ruby-1.8.7-head)
   global
   rails2r187

それぞれのディレクトリに移動してgemsetが自動で切り替わるか確認。
現在のRVM(gemset)の設定
sampleapp => rails3
sampleapp02 => rails2r187

$ cd sampleapp
Using /home/username/.rvm/gems/ruby-1.9.3-head with gemset rails3
$ ruby -v
ruby 1.9.3p203 (2012-05-04 revision 35536) [i686-linux]
$ rails -v
Rails 3.2.3

$ cd ../sampleapp02
Using /home/username/.rvm/gems/ruby-1.8.7-head with gemset rails2r187
$ ruby -v
ruby 1.8.7 (2012-04-14 patchlevel 361) [i686-linux]
$ rails -v
Rails 2.3.8

OKっぽい(^^)

gemsetを含むRVMのデフォルト設定。

前記事「RVMでgemsetがglobalに戻ってしまう」書いててオラオモタ。

RVMのデフォルト設定あるだろーうって。

$ rvm --help
== Usage
  rvm [Flags] [Options] Action [Implementation[,Implementation[,...]]

== Flags
--default      :: with 'rvm use X', sets the default ruby for new shells to X.

== Action
 use         :: setup current shell to use a specific ruby version

(かなり省略)
あったよ。

$ rvm --default use ruby-1.9.3-head@rails3
Using /home/username/.rvm/gems/ruby-1.9.3-head with gemset rails3

あー、せいせいした。俺気づくの遅。