• 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

Rails + Cucumber で Culerity を使うと、 以下のような WARNING が大量に発生する。 これでは、いくらテストがgreenでも精神はredになってしまう。

   1  % cucumber features/foo.feature
   2  Using the default profile...
   3  2010/01/20 18:43:57 com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl notify
   4  警告: Obsolete content type encountered: 'text/javascript'.
   5  2010/01/20 18:43:58 com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl notify
   6  警告: Expected content type of 'application/javascript' or 'application/ecmascript' for remotely loaded JavaScript element at 'http://z-ecx.images-amazon.com/images/G/01/nav2/gamma/amazonJQ/amazonJQ-combined-core-5113._V228305908_.js', but got 'application/x-javascript'.
   7  (...)
   8  .
   9  
  10  1 scenario (1 passed)
  11  1 step (1 passed)

この警告メッセージは、 HtmlUnit が吐いているものであるが、 Culerity::RemoteBrowserProxy のオプション(log_level) で制御することができる。 具体的には、 "script/generate culerity" を利用した場合、 以下の step ファイル内で定義されている。

   1  % vi features/step_definitions/culerity_steps.rb
   2  -  $browser.log_level = :warning
   3  +  $browser.log_level = :severe

(celerity の default は :off だが、culerity が :warning にしている)

上記の修正によって、WARNING の表示が抑制される。

   1  % cucumber features/foo.feature
   2  Using the default profile...
   3  .
   4  
   5  1 scenario (1 passed)
   6  1 step (1 passed)

新規プロジェクトの度に毎回変更するのが面倒であれば、 generator の template を直接変更するのもいいかもしれない。

   1  % vi $GEM_PATH/gems/culerity-0.2.7/rails_generators/culerity/templates/features/step_definitions/culerity_steps.rb

指定可能な log_level は、 (高) :all, :severe, :warning, :info, :config, :fine, :finer, :finest, :off (低) であり、実際に以下のコードで確認することができる。(JRuby)

   1  % irb
   2  irb(main):001:0> java.util.logging.Level.constants
   3  => ["FINE", "CONFIG", "FINEST", "FINER", "WARNING", "SEVERE", "OFF", "INFO", "ALL"]

log level に関するさらなる詳細は java.util.logging.Level を参照のこと。

http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/util/logging/Level.html

posted by Png maiha on Wed 20 Jan 2010 at 10:39

(以下は PostgreSQL を例にしてますが、他のドライバでも通用すると思います)

install

まずは JRuby 用のドライバをインストールします。

   1  % gem install activerecord-jdbcpostgresql-adapter

設定

通常は database.yml に "adapter: jdbcpostgresql" と記述して利用するのですが、ここでは別の方法を紹介します。 内容は簡単で以下のコードを評価するだけです。

   1  if RUBY_PLATFORM == "java"
   2    require "active_record/connection_adapters/jdbcpostgresql_adapter"
   3  end

(Railsであれば "config/initializers/jruby_compat.rb" などに記述しておくとよいでしょう)

メリット

  • MRI と同じアダプタ名 "postgresql" を利用できる
  • 変更なしで MRI, JRuby のどちらでも動作する

実行例

   1  % rvm use system
   2  % ./script/console
   3  >> User.count
   4  => 6
   5  >> User.connection.class
   6  => ActiveRecord::ConnectionAdapters::PostgreSQLAdapter
   7  
   8  % rvm use jruby
   9  % ./script/console
  10  >> User.count
  11  => 6
  12  >> User.connection.class
  13  => ActiveRecord::ConnectionAdapters::JdbcAdapter

JRuby はまだ発展途上ですので、 開発や挙動確認で MRI を利用する局面が多々あります。 そんな折、この方法であればいちいち database.yml の内容を変更する必要がないため、非常にシームレス&快適に利用できると思います。

posted by Png maiha on Mon 18 Jan 2010 at 23:44

chasen を久々に使ってみたところ以下のエラーが出ました。 (chasen-2.4.4-2 @ Ubuntu)

   1  % chasen foo.txt
   2  chasen: /var/lib/chasen/dic/debian/cforms.cha:9-21: no basic form

調べてみたところ、naist-jdic-utf8 パッケージの不具合で、 以下のコードを設定ファイルに追加することで解決するようです。 (場所はどこでもいいと思うのでとりあえず一番下に追加)

   1  # vi /usr/share/chasen/chasenrc-utf8
   2  ...
   3  (ENCODE "w")

(http://groups.google.co.jp/group/linux.debian.bugs.dist/browse_thread/thread/4fb69cc926bf8bc1?pli=1)

   1  % chasen foo.txt
   2  あ      ア      あ      感動詞
   3  いう    イウ    いう    動詞-自立   ...
   4  え      エ      え      感動詞
   5  お      オ      お      感動詞
   6  EOS

次のリリースでは治る予定のようです。

posted by Png maiha on Sat 2 Jan 2010 at 16:47